Array.fill中的奇怪行为

时间:2016-12-02 12:13:36

标签: javascript arrays

当我使用Array.fill填充多维数组时,推送到其中一个数组时会出现奇怪的行为:

var arr = Array(2).fill([]);
arr[0].push(5);
console.log(arr); 
//=> prints [[5], [5]]

2 个答案:

答案 0 :(得分:5)

fill基本上是这样做的:

var content = [];
for (var i = 0; i < 2; i += 1) {
  arr[i] = content;
}

因此,您的数组将引用您在每个属性中传递给fill的数组。

答案 1 :(得分:2)

这听起来很奇怪,但是你的代码实际上做的是创建一个数组([])并在Array(2)的每个项目中为该数组添加引用。因此,每当您更改该引用时 - 每个引用该数组的数组都会更改。

与以下内容完全相同:

var a = [];
var arr = Array(2).fill(a);
a.push(5);
console.log(arr[0][0], arr[1][0]);
a[0] = 2;
console.log(arr[0][0], arr[1][0]);

您可以看到arr内的值受a数组更改的影响。