Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Destructuring in Node.JS

This recent video claims that EMCAScript 6 destructuring is already partially implemented in Node.JS. I have tried various examples (using v0.10.12 and the --harmony flag), such as

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

and

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

to no avail. This ticket seems to suggest that destructuring is not yet supported in V8.

Is destructuring really partially implemented in Node.JS? What are snippets of code I can play with?

like image 598
Randomblue Avatar asked Jun 29 '13 10:06

Randomblue


People also ask

What is Destructuring in node JS?

JavaScript Object Destructuring is the syntax for extracting values from an object property and assigning them to a variable. The destructuring is also possible for JavaScript Arrays. By default, the object key name becomes the variable that holds the respective value.

What is meant by Destructuring in JS?

Destructuring is a JavaScript expression that allows us to extract data from arrays, objects, and maps and set them into new, distinct variables. Destructuring allows us to extract multiple properties, or items, from an array​ at a time.

Does node support Destructuring?

As of the latest Chrome (49) destructuring is now supported. As long as you stick to Chrome or Node (with the appropriate flags) you can now use just about all of ES6 without even needing a transpiler like Babel.

Where is Destructuring used in JavaScript?

Destructuring Assignment is a JavaScript expression that allows to unpack values from arrays, or properties from objects, into distinct variables data can be extracted from arrays, objects, nested objects and assigning to variables.


2 Answers

The lately released node.js v6 is using V8 version 5.0 which is supporting 93% of ES2015 language features (even 96% in v6.1).

Destructuring assignments can now be considered stable and can be used without any flags.

like image 45
birnbaum Avatar answered Oct 07 '22 16:10

birnbaum


Update for node v6 and newer: Node v6 supports destructuring assignment without anything special needed:

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

For older versions of node: You can get the list of supported harmony features by typing:

node --v8-options | grep harmony

node 5.x will give you:

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

The flag you need, --harmony_destructuring, was added in Node 4.1. Currently, you'll need to pass the --harmony_destructuring flag to enable the feature:

$ node --harmony_destructuring > var {foo} = {foo: 'bar'}; undefined > foo 'bar' 
like image 173
Laurent Perrin Avatar answered Oct 07 '22 17:10

Laurent Perrin