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

关于ES6中Array.fill方法的使用细节

程序员文章站 2022-03-10 18:18:02
...

Array.fill的具体定义请看这里

这个方法在平时的开发中有事提供了很大的便利,但是有一个细节容易被忽略,造成貌似看起来很诡异的bug
比如你生成了10个内容为{hasMore: false}

let states = Array.fill({hasmore: false})

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

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

所以尽量的不要填充对象类型,因为生成的n个数组成员其实都是指向同一个对象的,这种情况下要么填充基本类型的值要么去做一个深拷贝的,但是如果必须考虑后者,那对于使用这个Array.fill这个方法去解决一个问题的决定就不那么明智了,所以这里还是推荐使用基本变量填充。