फ़ंक्शन पैरामीटर सूचियों के अंदर घुंघराले ब्रेसिज़ es6 में क्या करते हैं?


122

मैं उन कार्यों को देखता रहता हूं जो इस तरह दिखते हैं जैसे मैं एक कोडबेस में काम कर रहा हूं:

const func = ({ param1, param2 }) => {
  //do stuff
}

वास्तव में यह क्या कर रहा है? मुझे इसे Google पर खोजने में कठिन समय मिल रहा है, क्योंकि मुझे यह भी पता नहीं है कि इसे क्या कहा जाता है, या इसे Google खोज में कैसे वर्णन किया जाए।


जवाबों:


117

यह विनाशकारी है , लेकिन मापदंडों के भीतर निहित है। बिना विनाश के समतुल्य होगा:

const func = o => {
    var param1 = o.param1;
    var param2 = o.param2;
    //do stuff
}

12
बस यह सुनिश्चित करने के लिए कि मैं सही ढंग से समझ रहा हूं, मूल रूप से इसका मतलब है कि उन गुणों वाली एक वस्तु को फ़ंक्शन में पारित किया जाएगा, और फिर फ़ंक्शन के भीतर, गुणों को अपने नाम का उपयोग करके स्वचालित रूप से एक्सेस किया जा सकता है?
नाथन

7
@ नथन हाँ, ऑब्जेक्ट विनाश पर विशेष रूप से अनुभाग देखें । हालाँकि, ध्यान दें कि चर का अद्यतन मूल ऑब्जेक्ट गुणों को अपडेट नहीं करेगा - ऐसा नहीं है कि यह मूल मूल्य का संदर्भ बना रहा है।
जेम्स थॉर्प


11

यह एक संपत्ति के रूप में एक वस्तु पारित कर रहा है।

यह मूल रूप से शॉर्टहैंड है

let param1 = someObject.param1
let param2 = someObject.param2

मापदंडों के बिना इस तकनीक का उपयोग करने का एक और तरीका निम्नलिखित है, आइए फिर एक दूसरे के लिए विचार करें कि someObject उन गुणों को समाहित करता है।

let {param1, param2} = someObject;

3

यह एक वस्तु विनाशकारी असाइनमेंट है। मेरी तरह, आपको यह आश्चर्यजनक लग सकता है क्योंकि ES6 ऑब्जेक्ट डिस्ट्रक्टिंग सिंटैक्स जैसा दिखता है, लेकिन ऑब्जेक्ट शाब्दिक निर्माण की तरह व्यवहार नहीं करता है।

यह आपके द्वारा चलाए गए बहुत ही संक्षिप्त रूप का समर्थन करता है, साथ ही साथ फ़ील्ड और डिफ़ॉल्ट तर्क का नाम बदलकर:

अनिवार्य रूप से, यह {oldkeyname: newkeyname = defaultvalue, ...} है। ':' कुंजी / मूल्य विभाजक नहीं है; '=' है।

इस भाषा के डिजाइन के निर्णय का कुछ नतीजा यह है कि आपको ऐसा करना पड़ सकता है

; ({A, b} = some_object);

अतिरिक्त पार्न्स एक ब्लॉक के रूप में बाएं घुंघराले ब्रेसिज़ को पार्स करने से रोकते हैं, और अग्रणी अर्धविराम, पिछले लाइन पर एक फ़ंक्शन को फ़ंक्शन कॉल के रूप में पार्स होने से रोकता है।

अधिक जानकारी के लिए देखें: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

वस्तु विनाशकारी असाइनमेंट के दौरान महत्वपूर्ण त्रुटियां, फेंकना नहीं; आप बस "अपरिभाषित" मूल्यों के साथ समाप्त होते हैं, चाहे वह एक महत्वपूर्ण त्रुटि हो या कोई अन्य त्रुटि जो चुपचाप 'अपरिभाषित' के रूप में प्रचारित हो गई।

> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
> 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.