javascript - js引用类型和值类型
阿神
阿神 2017-04-11 13:03:12
[JavaScript讨论组]
第一个引用传递,所以会互相影响。第二个类型不也是引用类型吗,但为什么是值传递呢?
   
var obj1 = {name: 'kenny'};
    var obj2 = obj1;
    obj1.name = 'kongyun';
    obj2.name // 'kongyun'
var a = {a:1, b:2};
var b=a;
a={a:3,b:4};    
console.log(a);//{a:3,b:4};    
console.log(b);{a:1, b:2}
阿神
阿神

闭关修行中......

全部回复(4)
PHPz

第一个,数据类型存储访问,希望有助。
第二个,

var a = {a:1, b:2};
var b=a;

a === b  //true  指向同一地址
a={a:3,b:4};  //这里是字面量方式,相当于new Object()
a === b  //false , 说明已经不是指向同一地址,所以结果不同
ringa_lee
a={a:3,b:4}; 

这行代码的意思就是a另起灶炉了,跟以前那个var a = {a:1, b:2};毫无瓜葛了

PHP中文网

var b=a;a和b都指向 {a:1, b:2};内存地址。
a={a:3,b:4}; a指向了{a:3,b:4};内存地址,而b还是指向{a:1, b:2};
所以两个结果不同!

大家讲道理

javascript里的所有传递都是值传递, 对于Object的类型你可以理解成指针, 这个变量只存储了Object的内存地址.

当一个变量向另一个变量复制引用类型的值时,会将存储在栈中的值(栈中存放的值是对应堆中的引用地址)复制一份到为新变量分配的空间中。

不同的是,这个值的副本其实是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上引用同一个对象。

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

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