以下操作在节点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上找不到任何明确表示支持或官方{{ 3}}
答案 0 :(得分:2)
是的,这是有效的ES2015代码。 aryOfObjs
是引入函数范围的变量,Object.assign({}, ...aryOfObjs)
是在该范围内求值的表达式,因此它可以访问任何这些变量。唯一的错误是,如果它们被无序访问,例如
const myFunc = ({
combindedObj = Object.assign({}, ...aryOfObjs),
aryOfObjs,
}) => console.log(combindedObj);
由于aryOfObjs
尚未初始化,将引发错误。