我有一个问题,为什么节点v6.7无法运行此代码:
/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
任何人都知道为什么会这样?我以为v6支持对象传播..?但我想不是吗?这是我看到的错误:
$stmt->execute();
$insertid = $conn->lastInsertId();
答案 0 :(得分:56)
使用rest / spread with objects是一个单独的提案,您可以阅读here。除非提交到第4阶段,否则提议不会被接受为年度ES发布,并且它现在是第3阶段。它可能会进入ES2018。如果您现在想要使用它,则必须使用babel
等转录器。
编辑:从Node v8.3开始,对象休息/传播可用,无需任何转换。
答案 1 :(得分:47)
看起来ES6扩展运算符仅适用于数组和迭代。它专门针对对象 NOT WORK 而设计:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator
相关引用:
仅适用于iterables
var obj = {"key1":"value1"}; function myFunction(x) { console.log(x); // undefined } myFunction(...obj); var args = [...obj]; console.log(args, args.length) //[] 0
虽然MDN文章之前曾建议尝试在对象上使用spread运算符应该导致undefined而不是抛出错误。从this revision开始,当前的MDN文章讨论了对“Spread for object literals”的支持
此外,node.js兼容性表声称node.js完全符合带有数组和迭代的扩展运算符的规范,但具体表明不支持对象rest / spread属性:http://node.green/#ESNEXT-candidate--stage-3--object-rest-spread-properties,至少不支持直到节点版本8.60(此时颜色变为绿色表示从8.3开始,节点 支持对象传播/休息运算符,as pointed out in the other answer)