节点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 

看起来像ES6传播运算符只适用于数组和迭代。 它专门devise为不适用于对象: 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文章build议试图在对象上使用扩展运算符应导致未定义,而不是引发错误。

此外,node.js兼容性表声明node.js完全符合数组和迭代器的spread运算符的规范,但是特别指出不支持对象的rest / spread属性: http : //node.green/#ESNEXT-candidate –stage-3 -对象rest扩展的属性

使用对象的rest/传播是一个单独的build议,你可以在这里阅读。 除非达到阶段4,否则每年ES发布的提案都不被接受,目前阶段3可能会进入ES2018。 如果你想现在使用它,你将不得不使用babel转译器。


编辑:由于节点v8.3,对象rest/传播是可用的,无需任何transpilation。