fill() 方法直接修改原数组,用指定值填充从起始索引(含)到结束索引(不含)的元素;支持负数索引,对引用类型为浅拷贝,需注意共享引用问题。

fill() 方法可以直接修改原数组,用指定值填充从起始索引(含)到结束索引(不含)之间的元素。
基本语法和参数含义
调用形式为 arr.fill(value, start, end):
- value:用来填充的固定值(可以是数字、字符串、对象、null、undefined 等)
- start(可选):开始填充的索引,默认为 0;支持负数(从末尾倒数)
- end(可选):停止填充的索引(不包含该位置),默认为数组长度;也支持负数
常见使用场景示例
填充部分区间时,注意 end 是“不包含”的边界:
-
[1, 2, 3, 4, 5].fill(0, 1, 3)→[1, 0, 0, 4, 5](索引 1 和 2 被填为 0) -
['a', 'b', 'c'].fill('x', -2)→['a', 'x', 'x'](从倒数第 2 位开始填到末尾) -
new Array(5).fill(7, 2, 4)→[undefined, undefined, 7, 7, undefined](空位被初始化为 undefined,再局部填充)
需要注意的关键细节
fill 操作是浅拷贝行为,对引用类型要特别小心:
- 如果 value 是对象或数组,所有被填位置都指向同一个引用,后续修改会相互影响
- 例如:
const arr = Array(3).fill({ a: 1 }); arr[0].a = 99; console.log(arr)输出三个对象的a都变成 99 - 想填入独立对象,需配合 map 或循环构造,不能直接用 fill
与替代方案对比
相比手动循环或 slice + concat,fill 更简洁且原地操作:
- 无需新建数组,节省内存
- 语义清晰,意图明确——就是“把某段替换成某个值”
- 但不返回新数组,如需不可变操作,应先用
slice()复制
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











