一、函数概述
fill() 函数提供将数组中给定范围内的所有元素更改为特定值的功能。
- 第一个参数是
value
这个参数可以是任何值,将会用来把新数组的指定的范围填充为相同的值。 - 第二个参数是
start
。这个参数是填值范围的起始索引,且该范围将会包括 start 索引位。此参数可选,未指定的话则默认为0
。 - 第三个参数是
end
。这个参数是填值范围的结尾索引,且该范围将不包括索引处的值。这个参数是可选的,未指定的话则默认为数组的长度值(Array.length)
,也就是如果未指定这个参数的话将会填充到数组的结尾。
二、普通数值
1. 正起始索引值
var array = [1, 2, 3, 4, 5];
array.fill(0, 2);
// array: [1, 2, 0, 0, 0]
fill()
函数传入参数 0 和 2
来进行调用,相当于 fill(0, 2, 5)
。这意味着指定值的填充范围为从索引 2
开始直到数组的结尾。
2. 负起始索引值
var array = [1, 2, 3, 4, 5];
array.fill(0, -2);
// array: [1, 2, 3, 0, 0]
这个函数调用相当于 fill(0, 3, 5)
这意味着指定值的填充范围为从索引 3
开始直到数组的结尾。
注意:如果这个值导致 start 参数值加上数组长度仍然小于 0
的话,fill()
函数将忽略起始索引值,并从数组的开头用指定值填充数组。
3. 正起始索引值,正结尾索引值
var array = [1, 2, 3, 4, 5];
array.fill(0, 2, 4);
// array: [1, 2, 0, 0, 5]
注意:指定正的 end
参数值时需要注意的是,如果这个值大于数组长度,则 fill()
函数将忽略 end
参数值,并填充特定值到数组结尾。
4. 正起始索引值,负结尾索引值
var array = [1, 2, 3, 4, 5];
array.fill(0, 2, -3);
// array: [1, 2, 3, 4, 5]
注意:由于这两个索引参数值相同,索引特定值不会填充任何数组项,因此数组状态和执行函数前的状态完全相同。
当使用 fill()
函数时,在以下任何一种情况下,都会发生结果数组与执行该函数之前状态完全相同的情况:end 参数值小于 start 参数值;start 参数值等于或大于数组长度;或者 end 参数值等于或小于0。
三、对象值
var array = [1, 2, 3];
array.fill({ a: 1, b: 2 });
// array: [{ a: 1, b: 2 }, { a: 1, b: 2 }, { a: 1, b: 2 }]
fill()
函数传入对象值参数 value
来进行调用。相当于 fill({ a: 1, b: 2 }, 0, 3)
。这意味着特定值的填充范围是从头到尾包含整个数组。尽管之前的示例中都使用的是原始值 0 用作 value 参数值,但该代码示例表明当必要时也可使用对象值来填充数组的指定范围。