Javascript: object1 = object2 究竟产生了什么?

Javascript: object1 = object2 produce what exactly?

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

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

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

如果我这样做 object1=object2 请在所有级别上对 object1 到底发生了什么。

我要稍微简化一下:

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 引用一个不同的对象,那么现有的变量就没有引用它,所以最终垃圾收集器会找到它并处理掉它。


What happens with inner objects? That is the question..

什么都没有。外部对象仍然引用它包含的值。唯一不同的是您有两个变量指向同一个外部对象。

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