JavaScript数组分配问题

JavaScript array assign issue

本问题已经有最佳答案,请猛点这里访问。

我刚刚创建了两个数组,并为其中一个数组分配了一个插入的键值对。然后我分配或复制一个数组到另一个数组。在这之后,我向第二个数组添加了另一个键值对,但它也会反映到原始数组中。例如。

1
2
3
4
5
6
var array1 =[];
var array2 =[];
array1.value1 ='1';
array2 = array1;
array2.value2 ='2';
console.log(array1); // it prints {value1:1, value2:2}

为什么它在我为array2添加键值对时更改array1对象?


通过执行array2 = array1;操作,可以将array1对象分配给array2变量。因此,修改array2将修改关联的对象,即array1


当你做类似于array2 = array1;的事情时,你只是把array2设置为对array1的引用。要复制array1,您需要执行array2 = array1.slice();

此外,不能用array1.value1 ='1';设置数组元素。您所做的是将数组转换为对象。所以你真正应该做的是:

1
2
3
4
5
var array1 = [];
var array2 = [];
array1[0] = 1;
array2 = array1.slice();
array2[1] = 2;


因为你通过引用array1传递给array2。你需要做如下的复制:

1
array2 = new Array(array1);