变量赋值 - Javascript: array1[0] = array2[0];这是按值传递还是按引用传递
variable assignment - Javascript: array1[0] = array2[0]; does this pass by value or by reference?
this.lastLocations[0] = this.locations[0];
this.locations[0].x++;
执行此代码时,它会递增位置 [0].x 和 lastLocations[0].x。 我希望它只是更改位置[0].x。 这是因为javascript分配的是引用而不是值吗? 还是问题在我的代码中的其他地方?
javascript 中的对象是通过引用分配的,因此两个变量都指向完全相同的对象。
因此,当您执行此操作时:
this.lastLocations[0] = this.locations[0];
然后,this.lastLocations[0]
和this.locations[0]
现在都指向完全相同的对象。 如果您通过其中一个变量对该对象进行更改,则该更改将通过另一个变量显示(因为它们都指向完全相同的对象)。
则必须创建对象的副本(通过创建一个新对象,然后将所有属性从原始对象复制到新对象)并分配该新副本。
还有许多其他关于克隆/复制对象方法的文章:
在 JavaScript 中深度克隆对象的最有效方法是什么?
如何正确克隆 JavaScript 对象?
在 Javascript 中是否有可能告诉一个对象停止对另一个对象的引用行为
以及一些其他相关问题:
对象是推送到 javascript 中的数组中,是深拷贝还是浅拷贝?
Javascript 按引用与按值
JavaScript 中的所有内容都是按值传递和赋值的。
"对象"不是 JavaScript 中的值。JavaScript 中唯一的值是基元和引用(指向对象的指针)。因此,array1[0]
要么是基元,要么是指向对象的指针,array2[0]
要么是基元,要么是指向对象的指针。
当您执行array1[0] = array2[0]
时,它会分配对象指针,以便两个指针都指向同一对象。
相关文章:
- 函数未将值作为参数传递
- 将值从html传递到AngularJS控制器
- 将值从Javascript传递并返回到VBScript,ASP中的Vice Versa
- 在函数中按值传递对象
- 变量/对象是否按值传递,为什么我不能在 javascript 中使用变量更改对象的属性
- Javascript :按值传递字符串
- setTimeout 按值传递数组(在咖啡中)
- JavaScript 处理参数按值传递
- 为什么这个数组是通过引用而不是按值传递的,我该如何改变它
- Javascript函数的所有参数都只按值传递
- Javascript数组按值传递不起作用
- 将字符串传递给函数是按值复制还是按引用传递
- jQuery事件绑定按值传递
- Web Workers——如果对象是按值传递的,内存使用量会翻倍吗?
- 是JavaScript按引用传递或按值传递
- React:如果值是按值传递的,那么为什么有必要拥有不可变的道具呢
- 变量赋值 - Javascript: array1[0] = array2[0];这是按值传递还是按引用传递
- 我想按值传递数组,但似乎它是通过引用传递的,数组上的 .map 操作没有给出预期的结果
- 按值传递JavaScript数组
- 将按引用调用作为按值调用传递