Array.prototype.fill()

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

尝试一下

语法

fill(value)
fill(value, start)
fill(value, start, end)

参数

value

用来填充数组元素的值。

start 可选

起始索引,默认值为 0。

end 可选

终止索引,默认值为 arr.length

返回值

修改后的数组。

描述

fill 方法接受三个参数 valuestart 以及 endstartend 参数是可选的,其默认值分别为 0this 对象的 length 属性值。

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

fill 方法故意被设计成通用方法,该方法不要求 this 是数组对象。

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

当一个对象被传递给 fill 方法的时候,填充数组的是这个对象的引用。

示例

[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, 3);         // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2);       // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN);     // [1, 2, 3]
[1, 2, 3].fill(4, 3, 5);         // [1, 2, 3]
Array(3).fill(4);                // [4, 4, 4]
[].fill.call({ length: 3 }, 4);  // {0: 4, 1: 4, 2: 4, length: 3}

// Objects by reference.
const arr = Array(3).fill({}) // [{}, {}, {}];
// 需要注意如果 fill 的参数为引用类型,会导致都执行同一个引用类型
// 如 arr[0] === arr[1] 为 true
arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]

规范

Specification
ECMAScript Language Specification
# sec-array.prototype.fill

浏览器兼容性

BCD tables only load in the browser

参见