node.js-节点v6因对象传播而失败

我对为什么节点v6.7无法运行此代码有疑问:

var a = {
    foo: 'bar'
}

var b = {
    ...a,
    my: 'sharona'
}
console.log(b)

有人知道为什么会这样吗? 我以为v6支持对象传播。 但是我想不是吗? 这是我看到的错误:

/home/teselagen/ve/tnrtest.js:6
    ...a,
    ^^^
SyntaxError: Unexpected token ...
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:528:28)
    at Object.Module._extensions..js (module.js:565:10)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)
    at Module.runMain (module.js:590:10)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:509:3
majorBummer asked 2019-11-17T02:55:53Z
2个解决方案
57 votes

对对象使用rest / spread是一个单独的建议,您可以在此处阅读。 除非达到第4阶段,否则它就不会进入年度ES版本的提案,而该提案目前处于第3阶段。它可能会进入ES2018。 如果要立即使用,则必须使用babel之类的编译器。


编辑:从节点v8.3开始,无需任何转换即可使用对象休息/传播。

saadq answered 2019-11-17T02:57:27Z
48 votes

看起来ES6传播运算符仅适用于数组和可迭代对象。 它专门针对对象而设计:[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator]

相关报价:

只申请可迭代项目

var obj = {"key1":"value1"};
function myFunction(x) {
    console.log(x); // undefined
}
myFunction(...obj);
var args = [...obj];
console.log(args, args.length) //[] 0

尽管MDN文章先前曾建议尝试在对象上使用传播运算符将导致未定义,而不是引发错误。 从此修订版开始,当前的MDN文章讨论了对“为对象文字扩展”的支持

另外,node.js兼容性表声称node.js完全符合数组和可迭代对象的散布运算符的规范,但专门指出不支持对象的rest / spread属性:[http://node.green/#ESNEXT- 至少要等到Node版本8.60为止(此时颜色变为绿色,以指示从8.3开始,Node确实支持对象散布/静止运算符,例如: 在其他答案中指出)

slebetman answered 2019-11-17T02:56:55Z
translate from https://stackoverflow.com:/questions/40066731/node-v6-failing-on-object-spread