比如下例:
var objA = {
a:{a1:"a1"},
b:"b1"
};
var objB = {b1:"b1"};
var c = objA.a;
c = objB;
console.log(objA);
得到的结果是:
[object Object] {
a: [object Object] {
a1: "a1"
},
b: "b1"
}
但是下面的程序:
var objA = {
a:{a1:"a1"},
b:"b1"
};
var objB = {b1:"b1"};
var c = objA.a;
c.c1 = "c1";
console.log(objA);
得到的结果是:
[object Object] {
a: [object Object] {
a1: "a1",
c1: "c1"
},
b: "b1"
}
为什么赋值时是对象就不能成功?
伊谢尔伦2017-04-10 14:55:44
第一个你就理解成 c 的指针只是从 objA.a
移给了 objB
,移动后 c
和 objA.a
已没有关系啦,后面的因为两个都是指向同一个对象的原因所以会同时修改。
巴扎黑2017-04-10 14:55:44
第一种情况:c中保存了objA.a的引用,c = objB;只会将c存储的引用改为objB的引用,objA.a是不会受影响的;
第二种情况:c中保存了objA.a的引用,c.c1 = "c1";修改的是objA.a的内存空间,所以会受影响;
PHP中文网2017-04-10 14:55:44
这个问题的关键在于理解JavaScript的引用赋值问题,楼上公子的指针说法来自于C,虽然更趋于本质,但是放在JavaScript语境下面,略显尖奥了。