2013-06-29 13 views
71

This recent video Ansprüche, die ECMAScript 6 Destrukturierung bereits implementiert ist teilweise in Node.JS. Ich habe verschiedene Beispiele versucht (mit v0.10.12 und die --harmony Flag), wieDestrukturierung in Node.JS

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

und

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

ohne Erfolg. This ticket scheint darauf hinzuweisen, dass die Destrukturierung in V8 noch nicht unterstützt wird.

Ist Destrukturierung wirklich in Node.JS teilweise umgesetzt? Was sind Codeschnipsel, mit denen ich spielen kann?

Antwort

85

Update für Knoten v6 und neuere: Node v6 unterstützt, ohne etwas Destrukturierung Zuordnung besondere benötigt:

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

Bei älteren Versionen von Knoten: Sie können die Liste der unterstützten Harmonie Features erhalten, indem Sie eingeben:

node --v8-options | grep harmony

Knoten 5.x gibt Ihnen:

--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") 

Die Flagge, die Sie benötigen, --harmony_destructuring, wurde in Knoten 4.1 hinzugefügt. Derzeit müssen Sie die --harmony_destructuring Flagge passieren die Funktion zu aktivieren:

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

Seltsam, dass es noch nicht ohne 'var' funktioniert. –

+3

@BrianMcCutchon Ohne 'var' musst du' {{foo} = {foo: 'bar}) 'machen, um zu verhindern, dass das führende' {'so interpretiert wird, dass es einen Block startet. Das ist bei jeder Implementierung gleich. –

+0

@torazaburo Interessant, hatte nicht daran gedacht. Sie sollten die 'var' /' let' beim Destrukturieren von Arrays jedoch weglassen können, aber das scheint in Knoten noch nicht zu funktionieren. –

10

Die ES6 compatibility table zeigt, dass Destrukturierung weder in Chrome 45 unterstützt wird, oder Knoten v4.

+1

Selbst mit 'Knoten --harmony_destructuring' –

+7

In Knoten v5.0.0 funktioniert es mit' Knoten --harmony_destructuring'. Ich weiß nichts über v4. – kernel

+6

funktioniert bei mir in Knoten 4.2.2 mit --harmony_destructuring –

14

Die kürzlich veröffentlichte node.js v6 verwendet V8 Version 5.0, die supporting 93% der ES2015 Sprachfunktionen (sogar 96% in v6.1) ist.

Destrukturierung Zuweisungen können jetzt stabil angesehen werden und kann ohne Fahnen verwendet werden.