首页 > web前端 > js教程 > 为什么当原始数组发生变化时,JavaScript 数组副本也会发生变化?

为什么当原始数组发生变化时,JavaScript 数组副本也会发生变化?

Mary-Kate Olsen
发布: 2024-12-18 21:31:14
原创
259 人浏览过

Why Do JavaScript Array Copies Change When the Original Changes?

为什么在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板