gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:01:49 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com