bat*_*jko 28 node.js ecmascript-6
根据文档,最新节点(节点5+)默认应支持扩展运算符,如下所示:
const newObj = {
...oldObj,
newProperty: 1
}
Run Code Online (Sandbox Code Playgroud)
我安装了节点5.10.1(例如'node -v'告诉我的那个).但我仍然收到此错误:
c:\[myprojectfolder]>node index.js
c:\[myprojectfolder]\index.js:21
...oldObj,
^^^
SyntaxError: Unexpected token ...
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:387:25)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:146:18)
at node.js:404:3
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
Joe*_*lay 50
该阵列蔓延语法都是支持的,但对象传播语法是不是-这是最有可能是由于它没有被最终确定为ECMAScript的规范的一部分,但(这是原计划纳入ES7/ES2016,但它得到了被撞回,如果我没记错的话).
同时你的选择是使用一个转换器(例如Babel,使用transform-object-rest-spread插件),或者如果感觉有点过分,你可以使用新的内置Object.assign函数.对象扩展语法实际上只是围绕Object.assign的语法糖 - 你问题中的例子可以这样表达:
const newObj = Object.assign({}, oldObj, {
newProperty: 1
});
Run Code Online (Sandbox Code Playgroud)
注意空对象作为第一个参数; 其余传递对象的属性合并到其中,函数调用右侧最远的属性优先.简单地说,oldObj作为第一个参数似乎更直观,但这并没有完全相同的效果 - 它会改变现有的oldObj以及返回它.将空对象作为目标oldObj保持不变.
更新2:对象扩展语法最终完成了提案流程,并将成为ES2018规范的一部分.
| 归档时间: |
|
| 查看次数: |
11798 次 |
| 最近记录: |