当我使用Array.fill填充多维数组时,推送到其中一个数组时会出现奇怪的行为:
var arr = Array(2).fill([]);
arr[0].push(5);
console.log(arr);
//=> prints [[5], [5]]
答案 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
数组更改的影响。