javascript - 使用不带参数的 Javascript slice() 方法

标签 javascript jquery

我目前正在通读这个 jquery masking plugin为了尝试理解它是如何工作的,作者在许多地方调用了 slice() 函数,没有向它传递任何参数。例如这里的 _buffer 变量是 slice()d,而 _buffer.slice()_buffer 似乎保持相同的值。

这样做有什么理由,还是作者只是让代码变得比它应该的更复杂?

 //functionality fn
 function unmaskedvalue($input, skipDatepickerCheck) {
     var input = $input[0];
     if (tests && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) {
         var buffer = _buffer.slice();
         checkVal(input, buffer);
         return $.map(buffer, function(element, index) {
             return isMask(index) && element != getBufferElement(_buffer.slice(), index) ? element : null; }).join('');
    }
    else {
        return input._valueGet();
    }
}

最佳答案

.slice() 方法制作一个数组的(浅)副本,并采用参数来指示要复制源数组的哪个子集。不带参数调用它只会复制整个数组。即:

_buffer.slice();
// is equivalent to
_buffer.slice(0);
// also equivalent to
_buffer.slice(0, _buffer.length);

编辑:开始索引不是强制性的吗?是的。和不。有点。 JavaScript 引用(如 MDN )通常说 .slice() 需要至少一个参数,即 start 索引。调用不带参数的 .slice() 就像说 .slice(undefined)。在ECMAScript Language Spec.slice() 算法中的第 5 步说“让 relativeStart 成为 ToInteger(start)”。如果您查看抽象操作的算法 ToInteger() ,它又使用 ToNumber() ,您会看到它最终将 undefined 转换为 0

不过,在我自己的代码中,我总是说 .slice(0),而不是 .slice() - 对我来说它看起来更整洁。

关于javascript - 使用不带参数的 Javascript slice() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11286950/

相关文章:

javascript - 有没有办法让输入框在用户按下回车键时运行某个功能?

javascript - 为什么当我尝试从 javascript 中的嵌套数组访问元素时,出现未定义的情况?

Javascript html dom元素数组for in循环

javascript - 如何迭代 DataTables 2.1 中的对象数组

javascript - 回调、匿名函数和上下文

javascript - 使用 v-bind 将数据放入属性 href 中的标签 a (VUE.JS 2 + Laravel 5.3)

javascript - 如何解码 url 中的 html?

javascript - 我应该如何更改我的 jquery 脚本以在第一次单击时为移动菜单设置动画?

javascript - 从右向左水平滚动

javascript - 拖放功能和箭头贴图