为啥我的扩展语法在节点 v7.0.0 中不起作用?
Posted
技术标签:
【中文标题】为啥我的扩展语法在节点 v7.0.0 中不起作用?【英文标题】:Why isn't my spread syntax working in node v7.0.0?为什么我的扩展语法在节点 v7.0.0 中不起作用? 【发布时间】:2017-06-14 02:41:41 【问题描述】:我正在尝试像这样使用 Object Spread 语法:
let credentialsWithAuth = ...credentials, type: 'basic'
其中的凭据是一个以用户名和密码作为键和值的对象。但是SyntaxError: Unexpected token ...
那么我是否必须使用 babel 设置节点才能使其工作?我认为现在内置了原生支持。
http://node.green/
如果没有Object.assign
等,我不能使用它吗?
有人可以澄清一下吗?
【问题讨论】:
这是否可以在没有 Babel 的 vanilla Node 上工作? 是的,这就是我看到node.green后想知道的原因@ 根据this 的回答,Object spread 还不是ECMAscript 的官方实现。仅适用于数组传播。例如,这将起作用:credentials = [1,2]; [...credentials, 3]
。不幸的是,您将不得不选择babel
或Object.assign
。
请注意,扩展运算符只能应用于可迭代对象:来自 msdn
【参考方案1】:
节点 7.0 中可用的传播语法不处理对象的传播属性。您正在寻找的是object spread syntax,它目前处于 TC39 流程的第 3 阶段。您可以在process document 中找到有关该过程的更多信息,在its repository 中找到有关提案的信息。
【讨论】:
老问题,但只是想更新节点 v8+ 完全支持对象传播。这是非 esnext 支持链接kangax.github.io/compat-table/es2016plus/#test-object_rest/…【参考方案2】:是的,它仅在 node_8x 及更高版本中受支持。然而,使用Object.assign()
(不会覆盖源对象)的正确等价物是:
let credentials = username : 'test', password: 'test'
let credentialsWithAuth = Object.assign(, type: 'basic' , credentials)
console.log(credentialsWithAuth)
【讨论】:
以上是关于为啥我的扩展语法在节点 v7.0.0 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Flexbox 粘滞页脚在 Safari 中不起作用?