【问题标题】:Node v6 failing on object spread节点 v6 在对象传播上失败
【发布时间】:2017-02-25 06:38:56
【问题描述】:

我有一个关于为什么 node 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

【问题讨论】:

  • 在节点 8 中使用 --harmony 标志工作。
  • 即使没有标志也可以在节点 8.3.0 中工作

标签: node.js ecmascript-6


【解决方案1】:

对对象使用 rest/spread 是一个单独的建议,您可以阅读有关 here 的信息。除非达到第 4 阶段,否则每年的 ES 版本不会接受提案,目前是第 3 阶段。它可能会进入 ES2018。如果你现在想使用它,你必须使用像 babel 这样的转译器。


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

【讨论】:

  • 我有节点 8.6 仍然有问题
  • 您确定您使用的是 8.6 版本吗?尝试将console.log(process.version) 添加到脚本的顶部,以确保它正在运行该版本。如果是这样,您的代码中可能存在其他问题。
【解决方案2】:

看起来 ES6 扩展运算符仅适用于数组和可迭代对象。它专为 NOT WORK 对象而设计: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 文章建议尝试对对象使用扩展运算符应该导致未定义而不是引发错误。从 this revision 开始,当前的 MDN 文章讨论了对“Spread for object literals”的支持

另外,node.js 兼容性表声称 node.js 完全符合带有数组和可迭代的扩展运算符的规范,但特别指出不支持对象的 rest/spread 属性:http://node.green/#ESNEXT-candidate--stage-3--object-rest-spread-properties,至少直到 Node 8.60 版(此时颜色变为绿色,表示从 8.3 开始,Node 确实支持对象扩展/休息运算符,as pointed out in the other answer

【讨论】:

  • 我认为他们在以前的版本中使用了通过 --harmony_destructuring 标志传播的对象,但由于它“不是标准的”而将其删除。快速原型而不是对所有事情都使用 Babel 非常有用... :-(
  • 这已经过时了。对象传播在现代浏览器中确实有效,并且在 Node 8 中
猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 2020-02-06
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2012-08-15
  • 2019-12-03
  • 1970-01-01
相关资源
最近更新 更多