javascript - ES6中对象的扩展运算符使用问题?
怪我咯
怪我咯 2017-04-11 11:00:57
[JavaScript讨论组]
let o1 = { a: 1 };
let o2 = { b: 2 };
o2.__proto__ = o1;
let o3 = { ...o2 };
对象o3是o2的拷贝,但是只复制了o2自身的属性,没有复制它的原型对象o1的属性,这段代码中let o3 = { ...o2 };这句赋值语句跟let o3 = o2有什么区别?
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(4)
黄舟
let o4 = o2;

o3 === o2 //false
o4 === o2 //true

对象是引用类型。赋值是指向指针,所以o4和o2引用同一个对象。

拷贝是新开一块内存,不指向同一个对象。

黄舟

... 的意义就是 Object Spread Operator对象展开运算符

通过babel转换的话,会转换成Object.assign
所以,let o3 = { ...o2 },最终等价的是:let o3 = { b: 2 };
let o4 = o2 的话,就是引用,修改其中一个对象,另一个也会变。

怪我咯

纠正下题目 es7并不是es6 这个相当于Object.assign({},o2)

怪我咯

这个玩应用到数组里比较好,别用来结构对象什么的了,用不好就乱七八糟的了。

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

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