2016-03-11 11 views
23

क्यों निम्न सिंटैक्समैं ऑब्जेक्ट की किसी संपत्ति की सीधे संपत्ति का उपयोग क्यों नहीं कर सकता?

{a:1,b:2}.constructor 

अमान्य है, जबकि

[1,2].constructor 

मान्य है?

+17

'({a:: 1, बी: 2})।

आप एक संदर्भ में, जहां यह स्पष्ट रूप से एक वस्तु है कि वाक्य रचना का उपयोग करते हैं, तो कोई अस्पष्टता है constructor' – elclanrs

उत्तर

35

{a:1,b:2}.constructor अमान्य वाक्यविन्यास नहीं है, लेकिन यह संदिग्ध है, क्योंकि {} एक ब्लॉक, या एक वस्तु को दर्शाता है? तो आपको ({a:1,b:2}).constructor जैसे कोष्ठक के साथ अभिव्यक्ति को असंबद्ध करना होगा। अब जावास्क्रिप्ट जानता है कि आप किसी ऑब्जेक्ट का उपयोग करना चाहते हैं।

console.log({a:1,b:2}.constructor) // works fine 
13

एक लाइन की शुरुआत में वक्र ब्रैकेट के रूप में object literal के बजाय पहचाना जाता है।

यदि आप कंसोल में त्रुटि देखते हैं, तो आप Uncaught SyntaxError: Unexpected token : देख सकते हैं। इसलिए, त्रुटि कन्स्ट्रक्टर संपत्ति को कॉल करने में नहीं है।

इसके अलावा

, जब आप कंसोल

{a:1} 

जे एस एक label और नहीं संपत्ति a के साथ एक वस्तु के साथ एक ब्लॉक के रूप में व्याख्या इस में लिखें।

+0

एक क्या है' line'? अर्धविराम-निर्भर भाषाओं (विशेष रूप से जेएस अपने मजाकिया नियमों के साथ) 'लाइन' के बारे में नहीं जानता है। लेकिन '; {1: 2} .constructor' अमान्य है। शायद आप 'कथन' या 'अभिव्यक्ति' का अर्थ 'लाइन' से अधिक है? – cat

+1

@tac, हाँ, 'कथन' यहां और अधिक सही लगता है – Grundy

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

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