let o1 = { a: 1 };
let o2 = { b: 2 };
o2.__proto__ = o1;
let o3 = { ...o2 };
对象o3是o2的拷贝,但是只复制了o2自身的属性,没有复制它的原型对象o1的属性,这段代码中let o3 = { ...o2 };这句赋值语句跟let o3 = o2有什么区别?
let o1 = { a: 1 };
let o2 = { b: 2 };
o2.__proto__ = o1;
let o3 = { ...o2 };
对象o3是o2的拷贝,但是只复制了o2自身的属性,没有复制它的原型对象o1的属性,这段代码中let o3 = { ...o2 };这句赋值语句跟let o3 = o2有什么区别?
let o4 = o2;
o3 === o2 //false
o4 === o2 //true
对象是引用类型。赋值是指向指针,所以o4和o2引用同一个对象。
拷贝是新开一块内存,不指向同一个对象。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
... 的意义就是 Object Spread Operator对象展开运算符
通过babel转换的话,会转换成Object.assign
所以,let o3 = { ...o2 },最终等价的是:let o3 = { b: 2 };
let o4 = o2 的话,就是引用,修改其中一个对象,另一个也会变。