关于ES6中Array.fill方法的使用细节
程序员文章站
2022-03-10 18:18:02
...
Array.fill的具体定义请看这里
这个方法在平时的开发中有事提供了很大的便利,但是有一个细节容易被忽略,造成貌似看起来很诡异的bug
比如你生成了10个内容为{hasMore: false}
let states = Array.fill({hasmore: false})
你想去动态改变其中某一项的值,你会发现整个数组里面的值全都变化了,这是因为你忽略了这个方法的一个注意事项:
如果填充的类型为对象,那么被赋值的是同一个内存地址的对象,而不是深拷贝对象。
所以尽量的不要填充对象类型,因为生成的n个数组成员其实都是指向同一个对象的,这种情况下要么填充基本类型的值要么去做一个深拷贝的,但是如果必须考虑后者,那对于使用这个Array.fill
这个方法去解决一个问题的决定就不那么明智了,所以这里还是推荐使用基本变量填充。