先上代码:

1
2
3
4
5
6
7
let arr = new Array(10).fill(0)
arr.forEach((item, index) => {
arr[index] += index
})
console.log(arr)
// 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// 正确,输出符合预期。

在开发云知识竞赛小程序时,使用Array().fill()填充数组,发现数组中的元素都是同一个对象,修改其中一个元素,其他元素也会跟着变化。如:

1
2
3
4
5
let arr = new Array(3).fill({name: '张三'})
arr[0].name = '李四'
console.log(arr)
// 结果:[{name: "李四"}, {name: "李四"}, {name: "李四"}]
// 错误,输出不符合预期。这个问题卡了约3小时!

这是因为Array().fill()使用对象(或数组)进行填充数组时,填充的是同一个对象(或数组),而不是不同的对象。