Node.JS 中的解构

Posted

技术标签:

【中文标题】Node.JS 中的解构【英文标题】:Destructuring in Node.JS 【发布时间】:2013-06-27 02:05:21 【问题描述】:

This recent video 声称 EMCAScript 6 解构已经在 Node.JS 中部分实现。我尝试了各种示例(使用 v0.10.12 和 --harmony 标志),例如

var [a, b] = [1, 2];

var a: a, b: b = a: 1, b: 2;

无济于事。 This ticket 似乎表明 V8 尚不支持解构。

解构真的在 Node.JS 中部分实现了吗?我可以使用哪些 sn-ps 代码?

【问题讨论】:

【参考方案1】:

节点 v6 和更新版本的更新:节点 v6 支持解构赋值,无需任何特殊要求:

var [a, b] = [1, 2];

对于旧版本的节点:您可以通过键入以下内容获取支持的和声功能列表:

node --v8-options | grep harmony

node 5.x 会给你:

--es_staging (enable all completed harmony features)
--harmony (enable all completed harmony features)
--harmony_shipping (enable all shipped harmony fetaures)
--harmony_modules (enable "harmony modules" (in progress))
--harmony_regexps (enable "harmony regular expression extensions" (in progress))
--harmony_proxies (enable "harmony proxies" (in progress))
--harmony_sloppy_function (enable "harmony sloppy function block scoping" (in progress))
--harmony_sloppy_let (enable "harmony let in sloppy mode" (in progress))
--harmony_unicode_regexps (enable "harmony unicode regexps" (in progress))
--harmony_reflect (enable "harmony Reflect API" (in progress))
--harmony_destructuring (enable "harmony destructuring" (in progress))
--harmony_default_parameters (enable "harmony default parameters" (in progress))
--harmony_sharedarraybuffer (enable "harmony sharedarraybuffer" (in progress))
--harmony_atomics (enable "harmony atomics" (in progress))
--harmony_simd (enable "harmony simd" (in progress))
--harmony_array_includes (enable "harmony Array.prototype.includes")
--harmony_tostring (enable "harmony toString")
--harmony_concat_spreadable (enable "harmony isConcatSpreadable")
--harmony_rest_parameters (enable "harmony rest parameters")
--harmony_sloppy (enable "harmony features in sloppy mode")
--harmony_arrow_functions (enable "harmony arrow functions")
--harmony_new_target (enable "harmony new.target")
--harmony_object_observe (enable "harmony Object.observe")
--harmony_spreadcalls (enable "harmony spread-calls")
--harmony_spread_arrays (enable "harmony spread in array literals")
--harmony_object (enable "harmony Object methods")

您需要的标志 --harmony_destructuring 已在 Node 4.1 中添加。目前,您需要传递 --harmony_destructuring 标志才能启用该功能:

$ node --harmony_destructuring
> var foo = foo: 'bar';
undefined
> foo
'bar'

【讨论】:

@BrianMcCutchon 如果没有var,您需要执行(foo = foo: 'bar) 以防止前导 被解释为开始一个块。在任何实现中都是一样的。 @torazaburo 有趣,没想到。不过,在解构数组时,您应该能够省略 var/let,但这似乎在 node 中不起作用。【参考方案2】:

ES6 compatibility table 表明 Chrome 45 或 Node v4 都不支持解构。

【讨论】:

即使node --harmony_destructuring? 在 Node v5.0.0 中,它适用于 node --harmony_destructuring。我不知道 v4。 在节点 4.2.2 中使用 --harmony_destructuring 为我工作 从最新的 Chrome (49) 开始,现在支持解构。只要您坚持使用 Chrome 或 Node(带有适当的标志),您现在就可以使用几乎所有的 ES6,甚至不需要像 Babel 这样的转译器。【参考方案3】:

最近发布的 node.js v6 使用的是 V8 5.0 版,它是supporting 93% 的 ES2015 语言功能(甚至在 v6.1 中是 96%)。

现在可以认为解构赋值是稳定的并且可以在没有任何标志的情况下使用。

【讨论】:

以上是关于Node.JS 中的解构的主要内容,如果未能解决你的问题,请参考以下文章

前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)

Node.js 中的模块和包之间的区别?

Node.js权威指南 (12) - Node.js中的其他模块

配置node.js中的express框架

Node.js权威指南 (10) - Node.js中的错误处理与断言处理

node.js 项目中的 index.js 用于啥?