ecmascript-6 - 使用其他解构值的对象解构默认值
问题描述
以下适用于节点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 规范上
解决方案
是的,这是有效的 ES2015 代码。aryOfObjs
是引入函数范围的变量,并且Object.assign({}, ...aryOfObjs)
是在该范围内评估的表达式,因此它可以访问这些变量中的任何一个。唯一会出现错误的情况是它们被乱序访问,例如
const myFunc = ({
combindedObj = Object.assign({}, ...aryOfObjs),
aryOfObjs,
}) => console.log(combindedObj);
这将引发错误,因为aryOfObjs
尚未初始化。
推荐阅读
- php - 来自变量的数组值
- c# - TcpClient 仅在服务器在调用 ConnectAsync 之前开始侦听时才连接
- node.js - `UnhandledPromiseRejectionWarning: Unhandled Promise Rejection` 在我的节点应用程序中
- c++11 - lambda 函数回调返回错误:C++ 没有合适的从到的转换函数存在
- c# - C# 扩展在控制台应用程序中工作,但在 MVC Web 应用程序中不工作。我错过了什么吗?
- javascript - 如何监听来自 GLTF 模型的纹理是否已加载并显示?三.js
- c# - 如何在 C# 中将 [part1|part2] 转换为仅 part1
- flutter - Dart:有没有不使用 Dart 的 split 方法将字符串拆分成句子的方法?
- php - DomPDF 删除页脚中的多余空间
- scala - Scala 中的模式转换