[英]JavaScript Array.prototype.fill: meaning of parameters
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 文章。
如果您閱讀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));
正如skyboyer所建議的, ECMA規范中共享相同的邏輯
也由skyboyer推薦,
[...].slice(1, 1)
什么都不做。 但
[...].拼接(1,1)
"...".substr(1, 1)
變異/返回值。 這是因為:
@skyboyer 對於 Array.splice,第二個參數不是索引而是計數。 對於 String.substr 第二個參數是長度而不是索引。 因此兩者都工作得很好
console.log([1, 2, 3].fill(4, 1, 1));
第一個參數4
是要填充的值。 第二個參數1
是起始索引(從哪里開始)。 第三個參數1
是唯一的結束索引。
所以如果你這樣做: console.log([1, 2, 3].fill(4, 0, 3));
它將從索引0
(值1
)開始填充[1,2,3]
數組並覆蓋索引2
所有值,因為我們說3
是獨占的。
所以結果將是: [4, 4, 4]
簡單來說
console.log([1, 2, 3].fill(4, 1, 1));
second 和thid 參數只不過是要填充的數組的長度,在您的情況1-1 中是通過減法計算的,因此如果您只想填充必須使用的第二個,它將不會填充任何東西
console.log([1, 2, 3].fill(4, 1, 2));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.