使用其他解构值的对象解构默认值
Object destructuring default using other destructured values
以下在节点 v8.11.4
和 babel 中运行 JavaScript 运行 on chrome
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 that says this is supported nor on the official ECMAScript 2015 spec
上找不到任何明确的内容
是的,这是有效的 ES2015 代码。 aryOfObjs
是引入函数范围的变量,Object.assign({}, ...aryOfObjs)
是在该范围内计算的表达式,因此它可以访问任何这些变量。唯一会出现错误的情况是它们被乱序访问,例如
const myFunc = ({
combindedObj = Object.assign({}, ...aryOfObjs),
aryOfObjs,
}) => console.log(combindedObj);
这会引发错误,因为 aryOfObjs
尚未初始化。
以下在节点 v8.11.4
和 babel 中运行 JavaScript 运行 on chrome
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 that says this is supported nor on the official ECMAScript 2015 spec
上找不到任何明确的内容是的,这是有效的 ES2015 代码。 aryOfObjs
是引入函数范围的变量,Object.assign({}, ...aryOfObjs)
是在该范围内计算的表达式,因此它可以访问任何这些变量。唯一会出现错误的情况是它们被乱序访问,例如
const myFunc = ({
combindedObj = Object.assign({}, ...aryOfObjs),
aryOfObjs,
}) => console.log(combindedObj);
这会引发错误,因为 aryOfObjs
尚未初始化。