 
                        比如下例:
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"
}
为什么赋值时是对象就不能成功?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第一个你就理解成 c 的指针只是从
objA.a移给了objB,移动后c和objA.a已没有关系啦,后面的因为两个都是指向同一个对象的原因所以会同时修改。第一种情况:c中保存了objA.a的引用,c = objB;只会将c存储的引用改为objB的引用,objA.a是不会受影响的;
第二种情况:c中保存了objA.a的引用,c.c1 = "c1";修改的是objA.a的内存空间,所以会受影响;
这个问题的关键在于理解JavaScript的引用赋值问题,楼上公子的指针说法来自于C,虽然更趋于本质,但是放在JavaScript语境下面,略显尖奥了。