簡體   English   中英

JavaScript Array.prototype.fill:參數的含義

[英]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]

在文檔中,我的測試與評論的答案一致。

但是,我看不出這怎么可能是對的。 參數指示索引11應填充4 索引1的值為2 ,所以我應該有結果應該是[1,4,3]

參數startend的正確解釋是什么?

更新

下面接受的答案指出結束索引不包括在內。 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) 在您的情況下, kfinal具有相同的值,因此不會進行任何更改。


如果您將參數更改為不同,您將看到差異。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM