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: array1[0] = array2[0];这是按值传递还是按引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22889833/