我目前正在通读这个 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/