我想知道为什么我们必须克隆对象而不是直接分配。
var obj1 = {x: 5, y:5};
var obj2 = obj1;
obj2.x = 6;
console.log(obj1.x); // logs 6
我已经得到了解决方案,但我想知道为什么obj2工作 像参考变量?
答案 0 :(得分:1)
让我们一步一步看看这段代码的作用:
var obj1 = {x: 5, y:5};
创建一个对象{x: 5, y:5}
并将其引用存储在变量obj1
var obj2 = obj1;
创建变量obj2
并将obj1
的值归属于它。由于obj1
的值是对象的引用,因此obj2
现在将指向同一个对象。
obj2.x = 6;
更改所引用对象中属性x
的值
console.log(obj1.x); // logs 6
从x
引用的对象中打印obj1
属性。当obj1
和obj2
指向同一位置时,输出为6
。
这与使用对象引用的任何语言都具有相同的行为。 Java,C,C ++,C#等。在OOP语言中,您通常使用clone()
方法进行字段副本。但就JS而言,这种方法并不存在,您需要对每个元素进行深层复制。你可以在这里找到关于如何在JS中克隆元素的一组很好的答案:What is the most efficient way to deep clone an object in JavaScript?