2009-12-31 16 views
39

संभावित डुप्लिकेट:
Detecting an undefined object property in JavaScriptजावास्क्रिप्ट में 'अपरिभाषित' को कैसे संभालें

नीचे जावास्क्रिप्ट नमूना

 try { 
    if(jsVar) { 
    proceed(); 
     } 
}catch(e){ 
     alert(e); 
} 

से यह jsVar घोषित किया गया है और किसी अन्य जेएस जुर्माना में प्रारंभ किया गया है।

समस्या यह है कि कोड अपरिभाषित त्रुटि को फेंकता है जब यह कोड दूसरी फ़ाइल (जहां इसकी घोषित और आरंभ की गई) से पहले निष्पादित की जाती है। यही कारण है कि यह कोशिश और पकड़ से घिरा हुआ है।

पकड़ने की कोशिश से इस अपरिभाषित त्रुटि को संभालने का सबसे अच्छा तरीका क्या है?

उत्तर

64

आप

if (typeof(jsVar) == 'undefined') { 
    ... 
} 
+0

क्या इसका "मेरे" तरीके से कोई फायदा है? –

+0

यह एक त्रुटि फेंक सकता है: जेएसवीआर परिभाषित नहीं है। आपको इसे इस तरह से जांचना चाहिए: अगर (window.jsVar! == अपरिभाषित) {}। ऐसा लगता है कि टाइप() "कैच" इस त्रुटि में है। –

+0

@ फ़ैबियन: या शायद अगर (विंडो में "जेएसवार") का उपयोग करें {} ... लेकिन मैं कोड से बचूंगा जिसके लिए इस त्रुटि मामले के लिए कोडिंग की आवश्यकता होगी। –

0

जावास्क्रिप्ट के साथ इस तथ्य की जांच कर सकते, निम्न मान का कारण होगा अगर हालत विफल और उसके बयान पर अमल नहीं: अशक्त, अपरिभाषित, झूठे, NaN, संख्या 0 और खाली स्ट्रिंग ''।

मानते हैं कि परिवर्तनीय jsVar एक बुलियन है और जब हम jsVar सत्य हैं, तो हम आगे बढ़ने() विधि को कॉल करना चाहते हैं, हम निम्नलिखित जांच कर सकते हैं।

if (jsVar && jsVar == true) 
    proceed(); 

ऊपर कोड सबसे पहले देखें कि jsVar परिभाषित किया गया है झलकी और उसके बाद की जाँच करता है कि अपने मूल्य सच है। यदि स्थिति दोनों ही शर्तों को पूरा किया जाता है तो केवल तभी संतुष्ट होगी।

यदि जेएसवार एक बुलियन नहीं है तो हम ऊपर दिए गए कोड में jsVar == सत्य के स्थान पर उपयुक्त चेक को प्रतिस्थापित कर सकते हैं।

typeof foo !== 'undefined' 
window.foo !== undefined 
'foo' in window 

पहले दो (जब तक foo के रूप में एक स्थानीय चर द्वारा आच्छादित नहीं है) के बराबर होना चाहिए, जबकि:

+0

ध्यान रखें कि यह बूलियन 'सत्य' की जांच नहीं करता है क्योंकि आप सख्त तुलना का उपयोग नहीं कर रहे हैं (जेएस में, उदाहरण के लिए '' 1 '== सच' सच है!); यह अभी भी संदर्भ त्रुटि को फेंक देगा यदि चर परिभाषित नहीं किया गया है, यानी आपका कोड मधु की समस्या को हल नहीं करता है – Christoph

+0

@ क्रिस्टोफ आप सही हैं! – Scott

8

जैसा कि अक्सर जावास्क्रिप्ट के साथ मामला है, वहाँ यह करने के लिए कई तरीके हैं यदि वैश्विक वैरिएबल परिभाषित किया गया है, तो अंतिम 0 true लौटाएगा, लेकिन शुरू नहीं हुआ (या स्पष्ट रूप से undefined पर सेट किया गया है)।

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