如果我使用=
或...
var o1 = {
a:1,
b:2
}
var o2 = o1; //say style 1
var o3 = {...o1} //say style 2
我使用样式1还是样式2是否重要?
答案 0 :(得分:1)
是的,存在差异
var o2 = o1; //say style 1
在 style1 中,o2将指向o1,而在一个中更改任何内容都会反映另一个中的更改。所以它就像02 引用相同的对象。
var o3 = {...o1} //say style 2
在 style2 中,o3是新变量,其相同但不会引用o1 。在改变o1时,o3中的任何内容都不会改变,反之亦然
答案 1 :(得分:1)
Spread运算符对您的对象执行一级深度克隆,因此
var o1 = {
a:1,
b:2
}
var o3 = {...o1}
将返回创建一个不引用o1
的新对象,当你编写var o3 = o1
时,你将o1的引用分配给o3,所以如果你改变了值说o3.a = 2,它也会改变原始物体,而第一种情况则不会改变
var o1 = {
a:1,
b:2
}
var o2 = {
a:1,
b:2
}
var o3 = {...o1}
var o4 = o2;
o3.a = 2;
console.log(o3, o1);
o4.a = 4;
console.log(o2, o4);

答案 2 :(得分:0)
我使用样式1还是样式2是否重要?
是的,你的 style1 和 style2 基本上做了两件事。
style1 正在将o1
的引用分配给o2
,所以
o1 == o2 // true
另一方面, style2 将o1
的值分配给o3
并创建一个新对象,所以
o1 == o3 // false