我想这只是我不了解JavaScript的工作原理.假设我有一个数组,调用它arr1,其中有6个整数, [1,2,3,4,5,6].如果我创建一个新数组:
var arr2 = arr1
Run Code Online (Sandbox Code Playgroud)
(为了保持不变的副本arr1),当我改变时arr1,所反映的变化arr2.
基本上,我在操纵arr1.出于测试目的,我想要一个未更改的副本,arr1这样当我完成后,我可以在我的网页上安装它们并查看它们之间的差异.但是,当我进行更改时arr1,这种变化反映在arr2.
任何人都可以解释为什么会发生这种情况并可能解决它 我更感兴趣的是为什么会发生这种情况而不是如何修复它.
一种方法是创建arr2一个单独的数组,并使用for循环用arr1数据填充它
for(int i = 0; i < arr1.length; i++) arr2[i] = arr1[i]
Run Code Online (Sandbox Code Playgroud)
但是,如果阵列很大,那可能会很昂贵.任何帮助表示赞赏.
分配非基元(例如数组)时,您不会复制.您正在创建对同一阵列的另一个引用.
如果要复制数组:
var arr2 = arr1.slice();
// or
var arr2 = arr1.concat();
Run Code Online (Sandbox Code Playgroud)
更多阅读:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array