this.lastLocations[0] = this.locations[0];
this.locations[0].x++;
执行此代码时,它会增加位置[0] .x和lastLocations [0] .x。我希望它只是改变位置[0] .x。这是因为javascript正在分配引用而不是值吗?或者我的代码中的其他地方是问题?
答案 0 :(得分:3)
javascript中的对象是通过引用分配的,因此两个变量都指向完全相同的对象。
所以,当你这样做时:
this.lastLocations[0] = this.locations[0];
然后,this.lastLocations[0]
和this.locations[0]
现在指向完全相同的对象。如果您通过其中一个变量对该对象进行更改,那么该更改将通过另一个变量显示(因为它们都指向完全相同的对象)。
如果要分配副本,则必须复制该对象(通过创建新对象,然后将所有属性从原始对象复制到新对象)并分配该新副本。 / p>
关于克隆/复制对象的方法还有很多其他帖子:
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?
答案 1 :(得分:0)
JavaScript中的所有内容都会通过并按值分配 。
"对象"不是JavaScript中的值。 JavaScript中唯一的值是基元和引用(指向对象的指针)。所以array1[0]
是一个原语或指向对象的指针,而array2[0]
是一个原语或指向对象的指针。
执行array1[0] = array2[0]
时,它会指定对象指针,以便两个指针指向同一个对象。