2013-06-29 3 views
71

This recent video утверждает, что деструктуризация EMCAScript 6 уже частично реализована в Node.JS. Я попробовал различные примеры (с использованием v0.10.12 и --harmony флага), такие какРазрушение в Node.JS

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

и

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

не дали никаких результатов. This ticket, по-видимому, предполагает, что деструктурирование пока не поддерживается в V8.

Деструктурирование действительно частично реализовано в Node.JS? Что такое фрагменты кода, с которым я могу играть?

ответ

85

Обновление для узла v6 и новой: Node 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' 
+0

Странно, что он еще не работает без 'var'. –

+3

@BrianMcCutchon Без 'var' вам нужно будет сделать' ({foo} = {foo: 'bar}) ', чтобы исключить, что ведущий' {'интерпретируется как начало блока. То же самое в любой реализации. –

+0

@torazaburo Интересно, не думал об этом. Тем не менее, вы должны упускать 'var' /' let' при массиве destructuring, но это пока не работает в узле. –

10

ES6 compatibility table показывает, что деструктурирующий не поддерживается ни в Chrome 45, или Узла v4.

+1

Даже с 'node --harmony_destructuring' –

+7

В Node v5.0.0 он работает с' node --harmony_destructuring'. Я не знаю о v4. – kernel

+6

работает для меня в узле 4.2.2 с --harmony_destructuring –

14

Недавно выпущенный node.js v6 использует версию V8 5.0, которая является supporting 93% функций языка ES2015 (даже 96% в версии 6.1).

Назначения деструктурирования теперь могут считаться стабильными и могут использоваться без каких-либо флагов.