Node.JS中的解构


76

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

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

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

无济于事。此票证似乎表明V8尚不支持解构。

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

Answers:


90

节点v6及更高版本的更新:节点v6支持解构分配,而无需任何特殊的要求:

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

对于旧版本的node:您可以通过键入以下命令来获取受支持的和声功能列表:

node --v8-options | grep harmony

节点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已添加到节点4.1中。当前,您需要传递--harmony_destructuring标志以启用该功能:

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

3
@BrianMcCutchon不带var,您需要做({foo} = {foo: 'bar})防止引导{被解释为开始一个块。在任何实现中都一样。

@torazaburo有趣,没想到。您应该能够在解构数组时省略var/ let,但是似乎在node中还行不通。
Brian McCutchon '16

15

最新发布的node.js v6正在使用V8版本5.0,该版本支持93%的ES2015语言功能(甚至在v6.1中为96%)。

现在可以将销毁分配视为稳定的,并且可以在不使用任何标志的情况下使用。


10

所述ES6兼容性表显示,拆解未在任一铬45,或节点V4的支持。


1
即使使用node --harmony_destructuring😓–
Ahmed Fasih

7
在Node v5.0.0中,它与一起使用node --harmony_destructuring。我不了解v4。
2015年

6
在节点4.2.2中为我工作
--harmony_destructuring

从最新版本开始,Chrome(49)现在支持解构。现在,只要您坚持使用Chrome或Node(带有适当的标志),就可以使用几乎所有的ES6,甚至不需要像Babel这样的编译器。
machineghost
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.