fill用指定值填充数组区间,copyWithin将数组内某段复制覆盖到另一段;二者均原地修改、支持负索引、返回原数组,且索引越界自动处理。

fill 和 copyWithin 都是 JavaScript 数组的原地修改方法,不创建新数组,直接改变原数组内容。它们都支持 start、end 参数控制作用范围,默认 end 为数组长度,且索引支持负数(从末尾计数)。
fill:用指定值批量填充数组区间
把从 start(含)到 end(不含)位置的元素全部替换成同一个值。如果只传一个参数,会填满整个数组。
-
[1, 2, 3, 4, 5].fill(0)→[0, 0, 0, 0, 0] -
[1, 2, 3, 4, 5].fill(9, 2)→[1, 2, 9, 9, 9](从索引 2 开始填到最后) -
[1, 2, 3, 4, 5].fill(7, 1, 3)→[1, 7, 7, 4, 5](仅改索引 1 和 2) -
['a', 'b', 'c'].fill('x', -2)→['a', 'x', 'x'](-2 表示倒数第 2 位,即索引 1)
copyWithin:把数组内部某段复制到另一段,覆盖目标位置
把数组中 target 开始的位置,用从 start 到 end(不含)这段内容覆盖。三个参数都可省略,默认为 0、0、数组长度。
-
[1, 2, 3, 4, 5].copyWithin(0, 3)→[4, 5, 3, 4, 5](把后两个数复制到开头) -
[1, 2, 3, 4, 5].copyWithin(2, 0, 2)→[1, 2, 1, 2, 5](把前两个复制到索引 2 起的位置) -
[1, 2, 3, 4, 5].copyWithin(-2, -4, -1)→[1, 2, 3, 2, 3](负索引:-4 是 2,-1 是 5,所以复制 [2,3,4] 的前两个到末尾两格) - 重叠复制安全:如
[1,2,3,4,5].copyWithin(1, 0)→[1,1,2,3,4],按从左到右顺序读源、从左到右写目标,不会因覆盖出错
使用注意点
- 两个方法都返回原数组本身(方便链式调用),但实际修改的是原数组
- 索引超出范围会被自动截断:start 大于等于 length 时无操作;end 小于 start 时复制空段
- 对稀疏数组有效:
new Array(5).fill(0)得到[0,0,0,0,0],不再是稀疏数组 - copyWithin 不改变数组长度,只覆盖已有位置;fill 可以配合 length 扩展数组(如先设
arr.length = 10再 fill)


















