前端 - JavaScript中直接给对象赋值和属性赋值有何区别?
高洛峰
高洛峰 2017-04-10 14:53:44
[JavaScript讨论组]

比如下例:

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

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
伊谢尔伦

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

巴扎黑

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

PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号