为啥我的扩展语法在节点 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]。不幸的是,您将不得不选择babelObject.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 中不起作用?

插件中的传播语法在 IE/edge 中不起作用

为啥我的动画在 Firefox 中不起作用?

为啥我的 .htaccess 文件在 cPanel 中不起作用?

为啥我的主循环在 tkinter 中不起作用?

为啥我的“onclick()”事件在 Angular 中不起作用?