首页 > 解决方案 > 使用其他解构值的对象解构默认值

问题描述

以下适用于节点v8.11.4和在 chrome 上运行的 babel 转译 JavaScript

const myFunc = ({
  aryOfObjs,
  combinedObj = Object.assign({}, ...aryOfObjs),
}) => console.log(combinedObj);
myFunc({
  aryOfObjs: [
    { foo: 'bar'},
    { biz: 'baz' },
  ]
}); // => { foo: 'bar', biz: 'baz' }

在 EMACScript 2015 中,这可以保证如上所示工作吗?

我知道 node 和 babel 不是 100% EMACScript 2015 投诉,但我相信它们都实现了对象解构规范我在mdn上找不到任何明确的说明,也没有在官方ECMAScript 2015 规范上

标签: ecmascript-6object-destructuring

解决方案


是的,这是有效的 ES2015 代码。aryOfObjs是引入函数范围的变量,并且Object.assign({}, ...aryOfObjs)是在该范围内评估的表达式,因此它可以访问这些变量中的任何一个。唯一会出现错误的情况是它们被乱序访问,例如

const myFunc = ({
  combindedObj = Object.assign({}, ...aryOfObjs),
  aryOfObjs,
}) => console.log(combindedObj);

这将引发错误,因为aryOfObjs尚未初始化。


推荐阅读