2013-06-29 46 views
71

This recent video聲稱EMCAScript 6解構已在Node.JS中部分實現。我已經試過各種實例(使用v0.10.12和--harmony標誌),如Node.JS中的解構

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

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

無濟於事。 This ticket似乎表明解構尚未在V8中得到支持。

解構是否真的在Node.JS中部分實現?什麼是我可以玩的代碼片段?

回答

85

更新節點V6和新:節點V6支持解構賦值沒有什麼特別的需要:

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

對於舊版本的節點的:你可以通過輸入得到的支持和諧的功能列表:

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' 
+0

奇怪的是,它還沒有'var'工作。 –

+3

@BrianMcCutchon如果沒有'var',你需要執行'({foo} = {foo:'bar})''以防止領先的'{'被解釋爲啓動一個塊。這在任何實現中都是一樣的。 – 2016-05-23 16:53:30

+0

@torazaburo有趣的,沒有想到這一點。當解構數組時,你應該能夠省略'var' /'let',但是在節點中似乎還沒有工作。 –

10

ES6 compatibility table表明,拆解沒有在任何瀏覽器45,或端點V4支持。

+1

即使使用'node --harmony_destructuring' –

+7

在Node v5.0.0中,它可以與'node --harmony_destructuring'配合使用。我不知道v4。 – kernel

+6

適用於節點4.2.2,使用--harmony_destructuring –

14

最近發佈的node.js v6正在使用V8 5.0版本,即supporting 93%的ES2015語言特性(甚至在6.1版本中爲96%)。

解構賦值現在可以被認爲是穩定的,可以在沒有任何標誌的情況下使用。