Spread运算符等效于Object assign

时间:2016-10-19 08:53:36

标签: javascript

将这些对象合并到扩展运算符相当于什么?我想在我的redux应用程序中使用spread而不是assign。

return Object.assign({}, obj1, obj2)

2 个答案:

答案 0 :(得分:3)

等价物是:

return { ..obj1, ...obj2 };

然而,如果不进行转换(例如babel),这将无法工作,因为对象休息传播是阶段3推荐,并且当前浏览器不支持。如果您使用babel,则必须使用Object rest spread transform babel插件或babel stage-3 preset

答案 1 :(得分:2)

正如docs

中所述
  

注意:通常,ES6中的扩展运算符深度为一级   复制数组。因此,它们不适合复制   多维数组。这与Object.assign和。的情况相同   对象传播运算符。请看下面的示例以获得更好的效果   理解。

这意味着传播是在一个新对象中进行的,因此不需要像Object.assign一样传递一个空对象。因此你可以这样做:

return {...obj1, ...obj2}

作为补充说明,以下是babel如何转换传播运算符:

const a = {...obj1, ...obj2}

成为:

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

var a = _extends({}, obj1, obj2);

See for yourself