Деструктуризація в Node.JS


77

Це недавнє відео стверджує, що деструктуризація EMCAScript 6 вже частково реалізована в Node.JS. Я пробував різні приклади (використовуючи v0.10.12 та --harmonyпрапор), такі як

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

і

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

безрезультатно. Здається, цей квиток передбачає, що деструктуризація ще не підтримується у V8.

Чи справді деструктуризація частково реалізована в Node.JS? З якими фрагментами коду я можу грати?

Відповіді:


90

Оновлення для вузла 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'

3
@BrianMcCutchon Без var, вам потрібно буде зробити, ({foo} = {foo: 'bar})щоб запобігти {інтерпретації ведучого як запуску блоку. Це однаково в будь-якій реалізації.

@torazaburo Цікаво, не думав про це. Ви, мабуть, зможете пропустити var/ letпри деструктуризації масивів, але це, здається, ще не працює у вузлі.
Brian McCutchon

15

Нещодавно випущений node.js v6 використовує V8 версії 5.0, яка підтримує 93% функцій мови ES2015 (навіть 96% у 6.1).

Завдання деструктуризації тепер можна вважати стабільними та використовувати без будь-яких прапорів.


10

В таблиця сумісності ES6 показує , що деструктурірующій не підтримуються в будь-якому Chrome 45, або вузол V4.


1
Навіть з node --harmony_destructuring😓
Ахмед Фасіх,

7
У Node v5.0.0 він працює з node --harmony_destructuring. Я не знаю про v4.
ядро

6
працює для мене у вузлі 4.2.2 з --harmony_destructuring
Олексій Руденко

Станом на останню версію Chrome (49) тепер підтримується деструктуризація. Поки ви дотримуєтесь Chrome або Node (з відповідними прапорцями), тепер ви можете використовувати майже весь ES6, навіть не потребуючи транслятора, такого як Babel.
machineghost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.