2011-12-18 24 views
7

जब वस्तु {}एक ऑब्जेक्ट शाब्दिक पर सीधे संपत्ति का उपयोग क्यों एक सिंटेक्स त्रुटि को फेंक देता है?

{}.a 

मैं त्रुटि मिलती है की संपत्ति a पहुंचने का प्रयास कर

SyntaxError: Unexpected token . 

कोष्ठक के साथ सब ठीक है:

({}).a 

मुझे त्रुटि क्यों मिलता है मुट्ठी जगह में? क्या अस्पष्टता है?

+0

जावास्क्रिप्ट वाक्य रचना सिर्फ इतना है कि अनुमति नहीं है। – Eliasdx

+0

अभिव्यक्ति '{} 'एक नई मूल वस्तु का मूल्यांकन करती है जिसका कोई गुण नहीं है। क्या आप 'ऑब्जेक्ट.प्रोटोटाइप' विधियों में से किसी एक तक पहुंचने का प्रयास कर रहे हैं? –

+1

संभावित डुप्लिकेट [तुरंत किसी ऑब्जेक्ट की संपत्ति तक पहुंच] [http://stackoverflow.com/questions/7518538/immediately-accessing-an-objects-property) – RightSaidFred

उत्तर

15

घुंघराले ब्रेसिज़ को block statement के रूप में व्याख्या किया जाता है, न कि ऑब्जेक्ट शाब्दिक के रूप में। आप एक बाएं घुंघराले ब्रेस के साथ एक अभिव्यक्ति कथन शुरू नहीं कर सकते हैं।

विनिर्देश राज्यों:

नोट एक ExpressionStatement एक उद्घाटन घुंघराले ब्रेस के साथ शुरू नहीं कर सकते क्योंकि यह है कि यह एक ब्लॉक के साथ अस्पष्ट बना सकता है। इसके अलावा, एक ExpressionStatement क्योंकि function कीवर्ड है कि यह एक FunctionDeclaration के साथ अस्पष्ट बना सकता है के साथ शुरू नहीं कर सकते।

स्रोत: http://es5.github.com/x12.html#x12.4

1

{} कर रहे हैं वहाँ वस्तु का निर्माण करने के लिए। आमतौर पर आप पहले एक ऑब्जेक्ट को नई ऑब्जेक्ट असाइन करते हैं।

var o = { 
    a: "b" 
}; 

console.log(o.a); 

लेकिन यह भी संभव है:

console.log({ 
    a: "b" 
}.a); 
संबंधित मुद्दे