首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

array.fill

fill()?方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。

代码语言:javascript
复制
var numbers = [1, 2, 3]
numbers.fill(1);

// results in [1, 1, 1]

语法

代码语言:javascript
复制
arr.fill(value)
arr.fill(value, start)
arr.fill(value, start, end)

参数

value用来填充数组元素的值。

start可选起始索引,默认值为0。

end可选终止索引,默认值为this.length

返回值

修改后的数组。

描述

具体要填充的元素区间是 [start,end) 。

fill方法接受三个参数?value,start以及end.startend参数是可选的, 其默认值分别为?0?和this对象的?length 属性值.

如果?start?是个负数, 则开始索引会被自动计算成为?length+start, 其中length?是?this?对象的?length 属性值. 如果end?是个负数, 则结束索引会被自动计算成为?length+end.

fill?方法故意被设计成通用方法,也就是说它不需要this值必须是个数组对象。

fill?方法是个可变方法, 它会改变调用它的this对象本身, 然后返回它, 而并不是返回一个副本.

示例

代码语言:javascript
复制
[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}

Polyfill

代码语言:javascript
复制
if (!Array.prototype.fill) {
  Object.defineProperty(Array.prototype, 'fill', {
    value: function(value) {

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

      var O = Object(this);

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

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

      // Step 8.
      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) {
        O[k] = value;
        k++;
      }

      // Step 13.
      return O;
    }
  });
}

如果你确实需要维护已过时的不支持?Object.defineProperty?的 JavaScript 引擎,那么最好完全不向?Array.prototype?添加方法,因为你不能使它不可枚举。

规范

Specification

Status

Comment

ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Array.prototype.fill' in that specification.

Standard

Initial definition.

ECMAScript Latest Draft (ECMA-262)The definition of 'Array.prototype.fill' in that specification.

Living Standard

?

浏览器兼容性

Feature

Chrome

Edge

Firefox

Internet Explorer

Opera

Safari

Basic Support

45

(Yes)

31

未实现

(Yes)

7.1

Feature

Android

Chrome for Android

Edge mobile

Firefox for Android

IE mobile

Opera Android

iOS Safari

Basic Support

(Yes)

(Yes)

(Yes)

31

未实现

(Yes)

8

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com