2010-03-30 22 views
6

तो a अपरिभाषित है, इस काम करता है:जावास्क्रिप्ट में अपरिभाषित और window.undefined के बीच क्या अंतर है?

if(window.a) {} 

जबकि यह एक त्रुटि फेंकता है:

if(a) 

कोई व्याख्या कर सकते हैं क्यों?

+0

कृपया इसे विस्तार से बताएं: Crockford अच्छा पार्ट्स में लिखते हैं। – Salil

उत्तर

10

window.awindow की एक संपत्ति है और यह अपरिभाषित है। a एक चर है, और यह अवर्गीकृत है।

एक चर का उपयोग करने के लिए, आपको पहले इसे var कथन का उपयोग करके घोषित करना चाहिए। चूंकि आपने a घोषित नहीं किया है, इसलिए दुभाषिया एक त्रुटि उठाता है। ऑब्जेक्ट गुणों का उपयोग करने के लिए स्पष्ट रूप से घोषित होने की आवश्यकता नहीं है।

If you attempt to extract a value from an object, and if the object does not have a member with that name, it returns the undefined value instead.

+1

हालांकि: "window.a = 2; a" - नहीं 'var' की आवश्यकता है। ऐसा होता है कि अपवाद फेंक दिया जाता है जब "अन-प्रीफिक्स्ड" पहचानकर्ता लुक-अप जंजीर स्कॉप्स से बाहर निकलता है। अंतिम संदर्भ चेक किया गया वैश्विक संदर्भ (या 'विंडो') है। अधिकांश व्यावहारिक उद्देश्यों के लिए, वैश्विक संदर्भ में 'var x' एक 'window.x = अपरिभाषित' है। Http://jibbering.com/faq/faq_notes/closures.html देखें और "पहचानकर्ता संकल्प, निष्पादन संदर्भ और स्कोप चेन" देखें। –

+0

@pst: यह ब्राउज़र में एक विशेष मामला है कि सभी वैश्विक चर 'विंडो' की संपत्ति हैं। यह जावास्क्रिप्ट की एक स्वतंत्र समस्या है। यदि आप 'window.a = 2 चलाते हैं; राइनो में एक 'जो एक गैर-ब्राउज़र वातावरण है, आपको अभी भी संदर्भ त्रुटि मिलती है। –

+0

@pst: वैसे भी, उत्तर को स्पष्ट करने में आपके पूरक के लिए धन्यवाद। –

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