我有一个问题,为什么节点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传播运算符仅适用于数组和可迭代对象。它是专为 无法正常工作 的对象: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
只申请可迭代项目
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-candidate –stage-3–object-rest- spread-properties,至少要等到Node版本8.60为止(此时颜色变为绿色,表明从8.3开始,Node 确实 支持对象散布/静止运算符