Array.fill对所有索引使用相同的对象

时间:2016-06-13 21:14:56

标签: arrays ecmascript-6 fill

我正在使用Array.fill预填充其他数组的数组。修改一个索引的数组也会修改另一个索引的数组。意味着它是同一个对象。

const arr = Array(2).fill([]);

arr[0].push('a');
arr[1].push('b');

// [['a', 'b'], ['a', 'b']]

我一直在阅读一些文档,但我没有看到任何地方提到这种行为。对象文字也会发生同样的事情。

这有什么意义吗?

2 个答案:

答案 0 :(得分:3)

是的。

您正在传递对已创建对象实例的引用。 如果您首先声明数组(例如JOIN),然后用它填充var c = [],您将获得相同的行为。

arr

答案 1 :(得分:1)

是的,确实有意义。

fill期望一个值放在所有索引中,而不是为每个索引生成新值的函数。并且它不会隐式克隆您传递的值(没有标准函数那样做)。这只是通常的赋值行为,其中对象(引用值)保持不变。