gpt4 book ai didi

javascript - 为什么在 JavaScript 中更改数组会影响数组的副本?

转载 作者:IT王子 更新时间:2023-10-29 02:51:35 26 4
gpt4 key购买 nike

我编写了以下 JavaScript:

var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;
copyOfMyArray.splice(0, 1);
alert(myArray); // alerts ['b','c']
alert(copyOfMyArray); // alerts ['b','c']

var myNumber = 5;
var copyOfMyNumber = myNumber;
copyOfMyNumber = copyOfMyNumber - 1;
alert(myNumber); // alerts 5
alert(copyOfMyNumber); // alerts 4

此代码声明了一个变量 myArray 并将其设置为一个数组值。然后声明第二个变量 copyOfMyArray 并将其设置为 myArray。它对 copyOfMyArray 执行操作,然后提醒 myArraycopyOfMyArray。不知何故,当我对 copyOfMyArray 执行操作时,似乎对 myArray 执行了相同的操作。

代码然后对数字值执行相同的操作:它声明一个变量 myNumber 并将其设置为一个数字值。然后声明第二个变量 copyOfMyNumber 并将其设置为 myNumber。它对 copyOfMyNumber 执行操作,然后提醒 myNumbercopyOfMyNumber。在这里,我得到了预期的行为:myNumbercopyOfMyNumber 的不同值。

JavaScript 中的数组和数字有什么区别,似乎更改数组会更改数组副本的值,而更改数字不会更改数字副本的值?

我猜出于某种原因,数组是通过引用引用的,数字是通过值引用的,但为什么呢?我如何知道其他对象的预期行为?

最佳答案

JavaScript 中的数组也是一个对象,变量只保存一个对象的引用,而不是对象本身。因此,这两个变量都引用了同一个对象。

顺便说一句,您与数字示例的比较不正确。您为 copyOfMyNumber 分配了一个新值。如果您为 copyOfMyArray 分配一个新值,它也不会更改 myArray

您可以使用 slice [docs] 创建数组的副本:

var copyOfMyArray = myArray.slice(0);

但请注意,这只会返回一个副本,即不会克隆数组中的对象。

关于javascript - 为什么在 JavaScript 中更改数组会影响数组的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6612385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com