2012-05-10 10 views
11

मोज़िला (फ़ायरफ़ॉक्स) के लिए कुछ जावास्क्रिप्ट कोड देखते हुए एड-ऑन एसडीके, मैं एक तरह से चर घोषणा देखा मैं नहीं देखा था पहले:जावास्क्रिप्ट - कई चर नियत चर घोषणा में घुंघराले ब्रेसिज़ उपयोग करने वाली प्रॉपर्टी आपत्ति उठाने

var { foo, bar } = someFunction("whatever"); // just an example 

चर नाम आसपास के लोगों घुंघराले ब्रेसिज़ देखते हैं? बाहर निकलता है, यह एक ऑब्जेक्ट के गुणों के मूल्यों को एक साथ कई चरों को असाइन करने का एक तरीका है। यह सरणियों के बजाय वस्तु गुणों के साथ छोड़कर destructuring assignment के समान लगता है या PHP के list,।

मैं वास्तव में इस बाहर कुछ नगण्य के माध्यम से, पाया के बाद से वहाँ इस पर कोई प्रलेखन प्रतीत होता है। इस कोड पर एक नज़र डालें:

function gimmeAnObject() { 
    return { 
     foo: "hey", 
     bar: "sup" 
    }; 
} 

console.log(gimmeAnObject()); // Object { foo="hey", bar="sup" } 

var { foo, bar } = gimmeAnObject(); 

console.log(foo); // hey 
console.log(bar); // sup 

मैंने यह भी पाया कि यह केवल फ़ायरफ़ॉक्स में काम करता है। "Uncaught सिंटैक्स त्रुटि:: अनपेक्षित टोकन {" क्रोम बजाय एक त्रुटि फेंक देते हैं। यह बताता है कि मैंने फ़ायरफ़ॉक्स एड-ऑन कोड को देखने से पहले इसे क्यों नहीं देखा था।

किसी और परिवर्तनशील घोषणा से पहले इस तरह का देखा है? मुझे इस पर कोई दस्तावेज क्यों नहीं मिल रहा है? चूंकि यह केवल फ़ायरफ़ॉक्स में काम करता है, मुझे लगता है कि यह मोज़िला चीज़ हो सकता है, लेकिन मुझे एमडीएन पर इसके बारे में कुछ भी नहीं मिला। फिर फिर, शायद मुझे नहीं पता था कि क्या खोजना है।

+0

[ब्लॉक के साथ लगातार घोषणा] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/10199229/constant-declaration-with-block) –

+1

मेरे प्रश्न के लगभग समान प्रश्न लिखते समय यह प्रश्न मिला :) – Motti

उत्तर

5

खोज रहे हैं "Destructuring असाइनमेंट" लिंक पर (अर्थात http://en.wikipedia.org/wiki/JavaScript_syntax#Assignment और http://dailyjs.com/2011/09/12/destructuring/) की तरह इस निर्माण destructuring काम है यह लग रहा है: आप एक चर नाम करने के लिए और कुछ इस तरह करते हैं।

विकिपीडिया:

In Mozilla's JavaScript, since version 1.7, destructuring assignment allows the assignment of parts of data structures to several variables at once. The left hand side of an assignment is a pattern that resembles an arbitrarily nested object/array literal containing l-lvalues at its leafs which are to receive the substructures of the assigned value.

जावास्क्रिप्ट सरणियों और वस्तुओं में और अधिक या कम एक ही हैं तो यह बहुत ही आश्चर्य की कि सरणियों के लिए समर्थित निर्माण भी वस्तुओं के लिए समर्थित है नहीं है।

+1

हू, ऐसा लगता है कि आप सही हैं। मुझे आश्चर्य है कि इस पर बहुत कम दस्तावेज क्यों है। मुझे लगता है कि कोई भी नहीं, लेकिन मोज़िला ने असाइनमेंट को नष्ट करने की उपयोगीता देखी। – grant

0

आप यह नहीं कर सकते।

var myObj = (function(){ 
    return { 
     foo: 'foo', 
     bar: 'bar' 
    }; 
})(); 
+1

आप ऐसा लगता है, हाँ, लेकिन यह फ़ायरफ़ॉक्स में लगता है, आप कर सकते हैं। फ़ायरफ़ॉक्स में पोस्ट किए गए jsFiddle लिंक को कंसोल खोलने का प्रयास करें। – grant

+0

शायद फ़ायरफ़ॉक्स थोड़ा और अधिक अनुमोदित है, या यह सिर्फ एक स्वयं का कार्यान्वयन है जो इसे अनुमति देता है। लेकिन मुझे लगता है कि यह घोषणा वेब मानकों में नहीं है –

+2

इसे वेब मानकों में जोड़ा जा रहा है। कुछ साल रुको ;) –

संबंधित मुद्दे