节点5.10传播运算符不工作

时间:2016-04-16 16:01:51

标签: node.js ecmascript-6

According to the docs,默认情况下,最新节点(节点5+)应支持扩展运算符,如下所示:

const newObj = {
        ...oldObj,
        newProperty: 1
      }

我安装了节点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

我错过了什么?

3 个答案:

答案 0 :(得分:50)

支持数组扩展语法,但object spread syntax不支持 - 这很可能是因为它尚未最终确定为ECMAScript规范的一部分(原本计划用于包含在ES7 / ES2016中,但如果我没记错的话,它会被反击。)

在此期间您的选项要么使用转换器(例如Babel,使用transform-object-rest-spread插件),要么感觉有点矫枉过正,您可以使用新的内置{{ 3}}功能。对象扩展语法实际上只是围绕Object.assign的语法糖 - 你问题中的例子可以这样表达:

const newObj = Object.assign({}, oldObj, {
    newProperty: 1
});

注意空对象作为第一个参数;其余传递对象的属性合并到其中,函数调用右侧最远的属性优先。简单地将oldObj作为第一个参数似乎更直观,但这不会产生完全相同的效果 - 它会改变现有的oldObj并返回它。将空对象作为目标会使oldObj保持不变。

更新: Object.assign

更新2:对象传播语法As of Node 8.6, object spread syntax is supported.,并将成为ES2018规范的一部分。

答案 1 :(得分:3)

您尝试使用的内容称为对象传播,不属于es2015规范。 Node仅支持函数调用和数组文字中的常规扩展。遗憾的是,即使支持数组解构,它们仍然会...使用const newObj = Object.assign({}, oldObj, { newProperty: 1 }); 链接。

您可以改为使用for example

{{1}}

答案 2 :(得分:1)

这可以在Node.js 8.5.0中使用。

示例:

http://localhost:3000/data/stuff.json

输出:

file-{date}.json

IDE调试控制台的屏幕截图:

enter image description here