Javascript传播运营商。 {... obj}和obj之间的区别是什么?

时间:2018-05-12 20:36:58

标签: javascript ecmascript-6

我正在开展一个反应项目,我继承的代码经常引用带有spread运算符的对象:

head(final_df, 10)

#    SubjectID EventNumber EventType Param1 Param2 Param3 Param4 Param5 Param6        AbsoluteTime Param1_2 Param2_2 Param3_2 Param4_2 Param5_2 Param6_2 Param1_3 Param2_3 Param3_3 Param4_3 Param5_3 Param6_3
# 1          1           1         A   0.30     45   1.50   0.14   0.18   0.00 2018-03-31 17:00:00     0.21       38     1.70     0.00     0.00     1.00     0.87       76     1.65     1.00     1.00     0.75
# 2          1           1         A   0.21     38   1.70   0.00   0.00   1.00 2018-03-31 17:00:02     0.87       76     1.65     1.00     1.00     0.75     0.78       32     1.32     0.86     0.00     0.00
# 3          1           1         A   0.87     76   1.65   1.00   1.00   0.75 2018-03-31 17:00:04     0.78       32     1.32     0.86     0.00     0.00       NA       NA       NA       NA       NA       NA
# 4          1           1         A   0.78     32   1.32   0.86   0.00   0.00 2018-03-31 17:00:04       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA
# 5          1           2         B   0.90     67   0.60   0.00   1.00   0.14 2018-04-30 17:00:00     1.20       23     0.30     0.60     0.00     0.00     1.40       27     2.50     1.00     0.09     1.00
# 6          1           2         B   1.20     23   0.30   0.60   0.00   0.00 2018-04-30 17:00:02     1.40       27     2.50     1.00     0.09     1.00       NA       NA       NA       NA       NA       NA
# 7          1           2         B   1.40     27   2.50   1.00   0.09   1.00 2018-04-30 17:00:04       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA
# 8          2           1         A   1.30    784   0.40   1.00   1.00   0.00 2018-02-21 17:00:00     0.60      623     1.40     0.18     0.78     1.00     0.45       54     0.67     0.00     0.00     0.27
# 9          2           1         A   0.60    623   1.40   0.18   0.78   1.00 2018-02-21 17:00:02     0.45       54     0.67     0.00     0.00     0.27     0.45       54     0.67     0.00     0.00     0.00
# 10         2           1         A   0.45     54   0.67   0.00   0.00   0.27 2018-02-21 17:00:04     0.45       54     0.67     0.00     0.00     0.00       NA       NA       NA       NA       NA       NA

而不只是:

{ ...obj }

这两个陈述之间是否有任何实际差异?哪种反应/不同情况下的最佳做法?

1 个答案:

答案 0 :(得分:2)

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

let obj2 = { ...obj };

您正在创建上一个对象的(浅)副本,因为您枚举obj的属性并将它们添加到新对象{}

'几乎'是因为只有可枚举的属性由扩展运算符处理。