为程序猿打造的最专业的问答平台
我要提问

JavaScript中直接给对象赋值和属性赋值有何区别?Javascript

浏览1411 | nil_461711 发布于 6年前 | | 举报
比如下例:

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"
}

为什么赋值时是对象就不能成功?


3个回答
1
令狐葱发表于6年前 令狐葱

第一种情况:c中保存了objA.a的引用,c = objB;只会将c存储的引用改为objB的引用,objA.a是不会受影响的;
第二种情况:c中保存了objA.a的引用,c.c1 = "c1";修改的是objA.a的内存空间,所以会受影响;

0
Kavlez发表于6年前 Kavlez

这个问题的关键在于理解JavaScript的引用赋值问题,楼上公子的指针说法来自于C,虽然更趋于本质,但是放在JavaScript语境下面,略显尖奥了。

0
孙晋硕发表于6年前 孙晋硕

第一个你就理解成 c 的指针只是从  objA.a  移给了  objB ,移动后  c    objA.a  已没有关系啦,后面的因为两个都是指向同一个对象的原因所以会同时修改。

我来回答
您当前输入了 0 个文字

擅长用户

jibjab 令狐葱 my 孙晋硕 kkli dabaozi 思倍儿 路俊建 zsc1980 阿木 mrJin 较瘦 i7GTX980 王子亭 张龙manlo bachelor Levine 依云 herostark 我感觉墙撞多了 李振春 那一年 喜剧演员 jianleer Fqujnyq jiajiakilong ooxxPP Snailrider xelz Kavlez 开发陈 SF丶STS nil_461711 kevin 你懂的 haidaozhaoran 夜尽天明19950504 德玛西亚之剑
TOP
登录
登录
记住我
忘记密码?
密码错误
登陆
没有账号?点此注册
举报
胡乱举报将扣除一定问答币或以其他方式进行处罚
辱骂 广告 重复 其他
举报