收到一个我无法给出原因的问题,
声明了一个变量var arr1 = [2, 3];
然后复制到另一个变量 var arr2 = arr1;
最后按下 arr2[0] = 1;
整个代码看起来像这样,
var arr1 = [2, 3];
var arr2 = arr1;
arr2[0] = 1;
console.log(arr1, arr2);
我们期望的结果是[2, 3] [1, 3]
但意外收到了[1, 3] [1, 3]
即两个数组值已更新。
谁能说说为什么两个数组的结果相同?
最佳答案
arr1 和arr2 是引用(类似于其他语言中的指针)。它们引用相同的 Array 对象。您基本上有两个指向同一个容器的指针。
然后当您尝试获取这两个“指针”指向的容器的内容时,它们返回相同的值是有道理的。
如前所述,您可以使用 slice: arr1.slice(0),这应该适用于大多数情况。
在某些情况下你需要一个深拷贝,这里提到了一个例子,当数组包含指向其他对象的指针时需要这样做,因为你几乎得到一个指向其他对象的指针数组,你需要一个更深的拷贝: http://james.padolsey.com/javascript/deep-copying-of-objects-and-arrays/
关于javascript - 使用新值更新时出现数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20209968/