1

javascript中的奇怪情况:

var arr1=new Array();
var arr2=new Array();
arr1=[[1,2],[3,4]];
for (i=0;i<arr1.length;i++) {
 arr2[i]=arr1[i];
}
alert(arr2[1][0]); //-> 3
arr1[1][0]=10;
alert(arr2[1][0]); //-> 10

我不明白为什么会这样

4

3 回答 3

7

您在第 3 行构建了一个数组数组。

在 for 循环中,您不会克隆内部数组,而只需复制一个指向它的指针。因此,如果您稍后更改其中的内部数组的内容,arr1也会影响arr2.

这里没有错误。

如果要克隆内部数组,请使用以下内容:

for (i=0;i<arr1.length;i++) {
 arr2[i] = arr1[i].slice(0);
}
于 2013-06-09T13:00:33.853 回答
0

arr1 和 arr2 都是数组的数组;因此,arr2 由与 arr1 相同的数组组成,因此分配给 arr1[i] 的元素“神奇地”显示为 arr2[i] 的相同元素。

于 2013-06-09T13:05:03.700 回答
0

你必须克隆阵列....像这样

var arr2 = arr1.slice(0);

检查这个

于 2013-06-11T05:42:33.617 回答