javascript - 如何理解下面一段js代码?
黄舟
黄舟 2017-04-10 14:34:48
[JavaScript讨论组]
    var a = {"x": 1};
    var b = a;
    console.log(b.x);

    a.x = 2;
    console.log(b.x);

    a = {"x":3};
    console.log(b.x);
    a.x = 4;
    console.log(b.x);

为什么输出的是

1
2
2
2
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(4)
黄舟

对于js的object,b=a这样实际上是传了个引用
所以a.x变了之后,b.x被影响了。
再然后a = {"x": 3}使a变成了一个新的object
所以它的改变就和b无关了。

就像是这样:

a = {"x": 3};
var b = a;
b === a;
a = {"x": 3};
b === a;
两次b === a的结果分别是true和false

如果你想要知道如何把a的值赋给b,然后让a的改变与b无关,代码还能够不猥琐(比如上面这种做法...)
可以参考这个->http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object

阿神
    var a = {"x": 1}; //a: object#1 {"x": 1}
    var b = a; //b: object#1 {"x": 1}
    console.log(b.x); //1

    a.x = 2; //a, b: object#1 {"x": 2}
    console.log(b.x); //2

    a = {"x": 3}; //a: object#2 {"x": 3}
    console.log(b.x); //2
    a.x = 4; //a: object#2 {"x": 4}
    console.log(b.x); //2
阿神

对象的赋值属于引用类型,

PHPz

除了基本类型, 其他对象都是引用方式赋值包括数组和函数

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

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