78

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?

3 Answers 3

91

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'
Sign up to request clarification or add additional context in comments.

2 Comments

@BrianMcCutchon Without var, you'll need to do ({foo} = {foo: 'bar}) to prevent the leading { from being interpreted as starting a block. That's the same in any implementation.
@torazaburo Interesting, hadn't thought of that. You're supposed to be able to omit the var/let when destructuring arrays, though, but that doesn't seem to work in node yet.
15

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.

Comments

10

The ES6 compatibility table shows that destructuring isn't supported in either Chrome 45, or Node v4.

4 Comments

Even with node --harmony_destructuring 😓
In Node v5.0.0 it works with node --harmony_destructuring. I don't know about v4.
works for me in node 4.2.2 with --harmony_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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.