我正在使用Array.fill预填充其他数组的数组。修改一个索引的数组也会修改另一个索引的数组。意味着它是同一个对象。
const arr = Array(2).fill([]);
arr[0].push('a');
arr[1].push('b');
// [['a', 'b'], ['a', 'b']]
我一直在阅读一些文档,但我没有看到任何地方提到这种行为。对象文字也会发生同样的事情。
这有什么意义吗?
答案 0 :(得分:3)
是的。
您正在传递对已创建对象实例的引用。
如果您首先声明数组(例如JOIN
),然后用它填充var c = []
,您将获得相同的行为。
arr
答案 1 :(得分:1)
是的,确实有意义。
fill
期望一个值放在所有索引中,而不是为每个索引生成新值的函数。并且它不会隐式克隆您传递的值(没有标准函数那样做)。这只是通常的赋值行为,其中对象(引用值)保持不变。