javascript - 使用新值更新时出现数组问题

标签 javascript arrays reference

收到一个我无法给出原因的问题,

声明了一个变量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/

相关文章:

c++ - initializer_list 作为数组引用参数的参数?

javascript - js - 传递和返回多个值

javascript - 如何将 cytoscape 对象存储在 Vue.js 数据实例中?

Javascript:根据数组过滤键后找到对象中具有最大值的键

arrays - 在 Ruby 中,我如何找到一个元素数组的索引?

java - 如何为多个JLabel[]添加鼠标监听器

javascript - 如何添加包装器并绑定(bind)到特定元素

javascript - 图像可拖动到特定的 x,y 坐标

c# - 如何引用一个API的两个版本?

c++构造函数使用不正确的参数类型来构造对象