为什么在 JavaScript 中更改数组会影响副本?
在 JavaScript 中,数组是对象,变量保存对这些对象的引用,而不是物体本身。在为数组分配新值时,这种继承可能会导致意外行为。
考虑以下示例:
// Declare an array and its copy var myArray = ['a', 'b', 'c']; var copyOfMyArray = myArray; // Modify the copy of the array copyOfMyArray.splice(0, 1); // Display the values alert(myArray); // ['b', 'c'] alert(copyOfMyArray); // ['b', 'c']
通过操作 copyOfMyArray,我们无意中修改了 myArray。这是因为像 myArray 和 copyOfMyArray 这样的变量指向同一个底层数组对象。
数组与数字
相反,当使用像 myNumber 和 copyOfMyNumber 这样的数字时,每个变量都保存值本身的副本。修改一个不会影响另一个。
var myNumber = 5; var copyOfMyNumber = myNumber; // Decrement the copy of the number copyOfMyNumber--; // Display the values alert(myNumber); // 5 alert(copyOfMyNumber); // 4
后果和解决方法
理解这种行为对于正确的对象操作至关重要。如果您确实需要数组的不同副本,请使用 slice 方法创建浅副本:
var copyOfMyArray = myArray.slice(0);
但是,值得注意的是,此浅副本仅复制数组对其元素的引用。任何内部对象仍将引用相同的原始实例。
以上是为什么当原始数组发生变化时,JavaScript 数组副本也会发生变化?的详细内容。更多信息请关注PHP中文网其他相关文章!