2013-06-29 9 views
71

This recent video का दावा है कि ईएमसीएस्क्रिप्ट 6 विनाशकारी आंशिक रूप से नोड में लागू है। जेएस। मैं इस तरह केनोड में विनाश। जेएस

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

और

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

कोई लाभ नहीं हुआ के रूप में विभिन्न उदाहरण (v0.10.12 और --harmony ध्वज का उपयोग), की कोशिश की है। This ticket यह सुझाव देता है कि विनाशकारी अभी तक V8 में समर्थित नहीं है।

क्या वास्तव में नोड.जेएस में आंशिक रूप से कार्यान्वित किया गया है? कोड के स्निपेट क्या हैं जिनके साथ मैं खेल सकता हूं?

उत्तर

85

नोड v6 और नए के लिए अद्यतन:

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

नोड के पुराने संस्करणों के लिए:: नोड v6 कुछ विशेष की जरूरत के बिना destructuring काम का समर्थन करता है आप टाइप करके समर्थित सद्भाव सुविधाओं की सूची प्राप्त कर सकते हैं:

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' को छोड़ने में सक्षम होना चाहिए, लेकिन यह अभी तक नोड में काम नहीं कर रहा है। –

10

ES6 compatibility table पता चलता है कि destructuring या तो क्रोम 45, या नोड v4 में समर्थित नहीं है।

+1

यहां तक ​​कि 'नोड - harmony_destructuring' –

+7

नोड v5.0.0 में यह' नोड - harmony_destructuring' के साथ काम करता है। मैं v4 के बारे में नहीं जानता। – kernel

+6

नोड 4.2.2 के साथ मेरे लिए काम करता है - harmony_destructuring –

14

हाल ही में जारी node.js v6 वी 8 संस्करण 5.0 का उपयोग कर रहा है जो supporting ES2015 भाषा सुविधाओं का 93% (v6.1 में भी 96%) है।

विनाशकारी कार्य अब स्थिर माना जा सकता है और बिना किसी झंडे के इस्तेमाल किया जा सकता है।