gpt4 book ai didi

Javascript: array1[0] = array2[0];这是按值传递还是按引用传递?

转载 作者:行者123 更新时间:2023-11-30 12:44:53 24 4
gpt4 key购买 nike

this.lastLocations[0] = this.locations[0];
this.locations[0].x++;

执行此代码时,它会递增 locations[0].x 和 lastLocations[0].x。我希望它只改变位置[0].x。这是因为 javascript 分配的是引用而不是值吗?还是我的代码中的其他地方有问题?

最佳答案

javascript 中的对象是通过引用分配的,因此您的两个变量都指向完全相同的对象。

所以,当你这样做时:

this.lastLocations[0] = this.locations[0];

然后,this.lastLocations[0]this.locations[0] 现在都指向完全相同的对象。如果您通过这些变量中的任何一个对该对象进行了更改,那么该更改将通过另一个变量显示(因为它们都指向完全相同的对象)。

如果你想分配一个副本,那么你实际上必须制作一个对象的副本(通过创建一个新对象,然后将所有属性从原始对象复制到新对象)并分配该新副本。

关于克隆/复制对象的方法还有许多其他帖子:

What is the most efficient way to deep clone an object in JavaScript?

How do I correctly clone a JavaScript object?

is it possible in Javascript to tell an object to stop having reference behavior with another object

还有一些其他相关问题:

Do objects pushed into an array in javascript deep or shallow copy?

Javascript by reference vs. by value

关于Javascript: array1[0] = array2[0];这是按值传递还是按引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22889833/

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