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 }
现在 a
和 b
引用同一个对象。可以把它想象成同一个对象可以通过两个名称访问。这意味着当您更改该对象时会发生这种情况:
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
如果我有 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 }
现在 a
和 b
引用同一个对象。可以把它想象成同一个对象可以通过两个名称访问。这意味着当您更改该对象时会发生这种情况:
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