使用扩展语法`...`和等于`=`分配对象

时间:2017-12-08 06:08:16

标签: javascript

如果我使用=...

分配对象,会有区别吗?
var o1 = {
    a:1,
    b:2
}

var o2 = o1; //say style 1
var o3 = {...o1} //say style 2

我使用样式1还是样式2是否重要?

3 个答案:

答案 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