Destrukturierung in Node.JS

77

In diesem aktuellen Video wird behauptet, dass die EMCAScript 6-Destrukturierung bereits teilweise in Node.JS implementiert ist. Ich habe verschiedene Beispiele ausprobiert (mit v0.10.12 und dem --harmonyFlag), wie z

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

und

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

umsonst. Dieses Ticket scheint darauf hinzudeuten, dass die Destrukturierung in V8 noch nicht unterstützt wird.

Ist die Destrukturierung in Node.JS wirklich teilweise implementiert? Mit welchen Codeausschnitten kann ich spielen?

Zufälliges Blau
quelle

Antworten:

90

Update für Node v6 und neuer : Node v6 unterstützt die Destrukturierungszuweisung, ohne dass etwas Besonderes erforderlich ist:

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

Für ältere Versionen von Node : Sie können die Liste der unterstützten Harmony-Funktionen abrufen, indem Sie Folgendes 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")

Das benötigte Flag --harmony_destructuringwurde in Knoten 4.1 hinzugefügt. Derzeit müssen Sie das --harmony_destructuringFlag übergeben, um die Funktion zu aktivieren:

$ node --harmony_destructuring
> var {foo} = {foo: 'bar'};
undefined
> foo
'bar'
Laurent Perrin
quelle
3
@BrianMcCutchon Ohne varmüssen Sie ({foo} = {foo: 'bar})verhindern, dass der Leading {als Start eines Blocks interpretiert wird. Das ist bei jeder Implementierung gleich.
@torazaburo Interessant, hatte nicht daran gedacht. Sie sollten in der Lage sein, die var/ letbei der Destrukturierung von Arrays wegzulassen , aber das scheint im Knoten noch nicht zu funktionieren.
Brian McCutchon
15

Die in letzter Zeit veröffentlicht node.js V6 - V8 - Version 5.0 verwendet , das ist die Unterstützung 93% der ES2015 Sprachfunktionen (sogar 96% in v6.1).

Destrukturierungszuweisungen können jetzt als stabil betrachtet und ohne Flags verwendet werden.

birnbaum
quelle
10

Die ES6-Kompatibilitätstabelle zeigt, dass die Destrukturierung weder in Chrome 45 noch in Node v4 unterstützt wird.

Dan Dascalescu
quelle
1
Auch mit node --harmony_destructuring😓
Ahmed Fasih
7
In Node v5.0.0 funktioniert es mit node --harmony_destructuring. Ich weiß nicht über v4.
Kernel
6
arbeitet für mich in Knoten 4.2.2 mit --harmony_destructuring
Oleksii Rudenko
Ab dem neuesten Stand von Chrome (49) wird die Destrukturierung unterstützt. Solange Sie sich an Chrome oder Node halten (mit den entsprechenden Flags), können Sie jetzt fast das gesamte ES6 verwenden, ohne einen Transpiler wie Babel zu benötigen.
Machineghost