Javascript扩展运算符。什么';{…obj}和obj之间的区别是什么

Javascript扩展运算符。什么';{…obj}和obj之间的区别是什么,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在处理一个react项目,我继承的代码通常引用具有如下扩展运算符的对象: { ...obj } 而不仅仅是: obj 这两种说法之间有实际区别吗?在反应/不同情况下,哪种做法是最佳做法 在大多数情况下,它们返回相同的对象。当然,当你这样做的时候 let obj2 = { ...obj }; 由于枚举了obj的属性并将其添加到新对象{},因此您正在创建上一个对象的(浅层)副本 “几乎”是因为扩展运算符只处理可枚举属性。在大多数情况下,它们返回相同的对象。当然,当你这样做的时候 let o

我正在处理一个react项目,我继承的代码通常引用具有如下扩展运算符的对象:

{ ...obj }
而不仅仅是:

obj

这两种说法之间有实际区别吗?在反应/不同情况下,哪种做法是最佳做法

在大多数情况下,它们返回相同的对象。当然,当你这样做的时候

let obj2 = { ...obj };
由于枚举了
obj
的属性并将其添加到新对象
{}
,因此您正在创建上一个对象的(浅层)副本


“几乎”是因为扩展运算符只处理可枚举属性。

在大多数情况下,它们返回相同的对象。当然,当你这样做的时候

let obj2 = { ...obj };
由于枚举了
obj
的属性并将其添加到新对象
{}
,因此您正在创建上一个对象的(浅层)副本


“几乎”是因为spread运算符只处理可枚举属性。

第一个是obj的浅层副本。使用spread运算符可以创建一个新的独立对象,该对象具有与
obj
相同的属性。操纵该新对象不会对
obj
产生任何影响。第一个是obj的浅拷贝。使用“扩展”操作符可以创建一个新的独立对象,该对象具有与
obj
相同的属性。操纵新对象不会对
obj
产生任何影响“相同”有点误导,对象原型可能不同,不可枚举属性也可能不同,只有自己的可枚举属性相同。“相同”有点误导,对象原型可能不同,非可枚举属性也是如此,只有自己的可枚举属性是相同的。