MDN上的文档表明Array.prototype.fill
的语法是:
Array.prototype.fill(value[, start[, end]])
示例
console.log([1, 2, 3].fill(4, 1, 1)); // [1, 2, 3]

在文档中,我的测试同意评论的答案。
但是,我看不出这是怎么回事。参数表明索引1
到1
应填充4
。索引1
的值为2
,因此我的结果应该是[1,4,3]
。
参数start
和end
的正确解释是什么?
更新
下面接受的答案表明结束指数不包括在内。 MDN上没有提到这一点,但是另一种方法(slice
)提到了它。
我冒昧地更新了MDN文章。
答案 0 :(得分:1)
如果您阅读polyfill代码,则会看到以下代码:
var k = relativeStart < 0 ?
Math.max(len + relativeStart, 0) :
Math.min(relativeStart, len);
// Steps 9-10.
var end = arguments[2];
var relativeEnd = end === undefined ?
len : end >> 0;
// Step 11.
var final = relativeEnd < 0 ?
Math.max(len + relativeEnd, 0) :
Math.min(relativeEnd, len);
// Step 12.
while (k < final) {
如你所见,它说while (k < final)
。在您的情况下,k
和final
都保持相同的值,因此不会发生突变。
如果您将参数更改为不相同,您将看到差异。
console.log([1, 2, 3].fill(4, 1, 2));
&#13;
中共享相同的逻辑
skyboyer ,
也建议[...]。切片(1,1)
什么都不做。但
[...]。拼接(1,1)
&#34; ...&#34; .substr(1,1)
mutates / return value。这是因为:
@skyboyer对于Array.splice,第二个参数不是索引而是计数。对于String.substr,第二个参数是length而不是index。因此两者都工作得很好
答案 1 :(得分:0)
console.log([1, 2, 3].fill(4, 1, 1));
第一个参数4
是要填充的值。
第二个参数1
是起始索引(从哪里开始)。
第三个参数1
是结束索引,它是独占的。
所以,如果你这样做:console.log([1, 2, 3].fill(4, 0, 3));
它将从索引[1,2,3]
(值0
)开始填充1
数组,并覆盖所有值,直至索引2
,因为我们说{{1}是独家的。
结果将是:3
答案 2 :(得分:0)
简单来说就是
console.log([1, 2, 3].fill(4, 1, 1));
第二个和thid参数只是在你的情况下通过减法计算的要填充的数组的长度1-1是0所以如果你只想填充你必须使用的第二个,它将不会填充任何东西
console.log([1, 2, 3].fill(4, 1, 2));