欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于使用ES6中Array.fill遇到的坑

程序员文章站 2022-03-10 18:14:26
...
const length = 2
const dataList = new Array(length).fill([])
dataList[0].push(1)
console.log(dataList)
// [[1], [1]]

你想去动态改变其中某一项的值,你会发现整个数组里面的值全都变化了,这是因为你忽略了这个方法的一个注意事项:

如果填充的类型为对象,那么被赋值的是同一个内存地址的对象,而不是深拷贝对象。

意思就是说填充的是对象,那么所有被填充的对象都指向同一个地址。所以这里我们需要将dataList深拷贝一下,再修改其值。

const length = 2
const dataList = new Array(length).fill([])
const newDataList = JSON.parse(JSON.stringify(dataList))
newDataList[0].push(1)
console.log(newDataList)
// [[1], []]

Array.fill还是比较适用于简单数据类型

相关标签: 技术 javascript