Javascript:object1 = object2产生了什么?

时间:2015-10-02 00:32:10

标签: javascript javascript-objects

如果我有两种类型的对象:

object1 : {
    value : { foo1: {}, foo2: 5 }, state: true, etc = {}
}

并且

object2 : {
    value : { foo1: { value: 5}, foo2: 6 }, state: true, etc = {}
}

如果我object1=object2在所有级别上对object1发生了什么,请

2 个答案:

答案 0 :(得分:2)

我将简化一下:

var a = { value: 1, aStuff: true };
var b = { value: 2, bStuff: true };
b = a;
console.log(b); // { value: 1, aStuff: true }

现在ab引用相同的对象。可以想象它可以通过两个名称访问同一个对象。这意味着当您更改该对象时会发生这种情况:

a.value = 5
console.log(a); // { value: 5, aStuff: true }

两个名字,一个对象。

那么{ value: 2, bStuff: true }对象发生了什么?一旦你告诉b引用另一个对象,那么现有的变量都没有对它的引用,所以最终垃圾收集器会找到并处理它。

  

内部物体会发生什么?这就是问题..

什么都没有。外部对象仍然保存引用它包含的值。所有改变的是你有两个指向同一个外部对象的变量。

答案 1 :(得分:2)

object1现在是object2的引用,object1中的任何更改都会更改object2;

var object1 = { foo: 'bar' };

var object2 = {
    value : { foo1: { value: 5}, foo2: 6 }
};

object1 = object2; // the { foo: 'bar' } is gone.

object1.foo2 = 7; //This changes object2.foo2 value
console.log(object2.foo2); //7