翻譯不完整。請協助 翻譯此英文文件

fill() 方法會將陣列中索引的第一個到最後一個的每個位置全部填入一個靜態的值。

var numbers = [1, 2, 3]
numbers.fill(1);

// results in [1, 1, 1]

語法

arr.fill(value)
arr.fill(value, start)
arr.fill(value, start, end)

參數

value
欲填入陣列的值。
start 選擇性
起始的索引值,預設為0。
end 選擇性
結束的索引值,預設為this.length(即陣列的長度)。

回傳值

修改後的陣列。

說明

要填入的元素區間為[start, end),意即包含start但不包含end

fill 方法採用了三個傳入參數,分別為value, start 和 endstart 和 end為可選參數,其預設值分別為0和該陣列的長度

start為負數,則此方法會將其換算成長度+start,長度即該陣列的長度。同理,若end為負數,其會被換算成長度+end

fill 函式刻意地被設計成通用的函式,它不需要this物件一定是一個陣列物件。此外,它是mutable方法,意即回傳的物件為this而非this的複製物件。

範例

[1, 2, 3].fill(4);               // [4, 4, 4]
[1, 2, 3].fill(4, 1);            // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2);         // [1, 4, 3]
[1, 2, 3].fill(4, 1, 1);         // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2);       // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN);     // [1, 2, 3]
Array(3).fill(4);                // [4, 4, 4]
[].fill.call({ length: 3 }, 4);  // {0: 4, 1: 4, 2: 4, length: 3}

填充工具

if (!Array.prototype.fill) {
  Object.defineProperty(Array.prototype, 'fill', {
    value: function(value) {

      // 步驟 1-2.
      if (this == null) {
        throw new TypeError('this is null or not defined');
      }

      var O = Object(this);

      // 步驟 3-5.
      var len = O.length >>> 0;

      // 步驟 6-7.
      var start = arguments[1];
      var relativeStart = start >> 0;

      // 步驟 8.
      var k = relativeStart < 0 ?
        Math.max(len + relativeStart, 0) :
        Math.min(relativeStart, len);

      // 步驟 9-10.
      var end = arguments[2];
      var relativeEnd = end === undefined ?
        len : end >> 0;

      // 步驟 11.
      var final = relativeEnd < 0 ?
        Math.max(len + relativeEnd, 0) :
        Math.min(relativeEnd, len);

      // 步驟 12.
      while (k < final) {
        O[k] = value;
        k++;
      }

      // 步驟 13.
      return O;
    }
  });
}

如果你需要支援實際上棄用的 JavaScript 引擎且其不支援Object.defineProperty的話,最好不要採用上述的填充工具,因為你不能將這個方法設定為不可列舉的屬性。

規範

規範 狀態 備註
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.fill' in that specification.
Standard 初次定義
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.fill' in that specification.
Living Standard  

相容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support45 (Yes)31 No (Yes)7.1
FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support (Yes) (Yes) (Yes)31 No (Yes)8

參見

文件標籤與貢獻者

 此頁面的貢獻者: jsgao0
 最近更新: jsgao0,