2013-02-26 16 views
7

मैं थोड़ा उलझन में हूं कि यह जांचने के लिए कि कैसे एक चर अपरिभाषित है या जावास्क्रिप्ट में नहीं है। मैं इसे इस तरह कर रहा हूं:जावास्क्रिप्ट में अपरिभाषित की जांच - क्या मुझे टाइपऑफ का उपयोग करना चाहिए या नहीं?

myVar === undefined; 

लेकिन क्या सभी मामलों में इसके बजाय टाइपफ़ोफ़ का उपयोग करना बेहतर है?

typeof myVar === undefined; 

और क्या undefined के उपयोग बनाम "undefined", जो मैं भी देखा है के बारे में?

+4

'टाइपोफ़' एक स्ट्रिंग देता है, इसलिए आपको इसके परिणाम की तुलना अपरिभाषित करने के लिए की जानी चाहिए, यदि आप इसका उपयोग करते हैं सख्त तुलना ऑपरेटर। –

+1

यदि आप केवल यह जानना चाहते हैं कि 'myVar' में एक गैर-झूठा मूल्य है, तो '!' पर्याप्त होगा। (उदाहरण के लिए 'अगर (! myVar) ' – marekful

+0

@ फ्रेडेरिक हामिदी - स्पष्टीकरण के लिए धन्यवाद। क्या आप ज्यादातर परिस्थितियों में टाइपफ़ का उपयोग करके (या अनुशंसा करते हैं)? सभी परिस्थितियों में? मैं पूछता हूं क्योंकि मैंने' myVar === देखा है अपरिभाषित 'प्रतिष्ठित किताबों में उपयोग किया जाता है, यही कारण है कि मैं इसका उपयोग कर रहा हूं। – larryq

उत्तर

14

यह जाँच करने के लिए सबसे अच्छा तरीका है - पूरी तरह से सरल:

typeof myVar === "undefined" 

यह ठीक है, लेकिन अगर किसी को unhelpfully वैश्विक undefined मूल्य ओवरराइट कर यह विफल हो सकता है:

myVar === undefined; 

यह करना पड़ता है कहा जा सकता है कि ECMAScript 5 निर्दिष्ट करता है कि undefined केवल पढ़ने के लिए है, इसलिए उपर्युक्त हमेशा किसी भी ब्राउज़र में सुरक्षित रहेंगे जो अनुरूप है।

यह काम कभी नहीं होगा, क्योंकि यह "undefined" === undefined (विभिन्न प्रकार) की तुलना समाप्त होता है:

typeof myVar === undefined; 
+0

यह एक स्वीकार्य उत्तर क्यों है? AFAIK, एक अपरिभाषित स्मृति स्थान तक पहुंचने का प्रयास हमेशा दोनों ES5 और ES6 में एक ReferenceError फेंक देगा: https://jsfiddle.net/Troop4Christ/on2oynvz/ और http://www.es6fiddle.net/ijls28o5/ – RavenHursT

+0

@RavenHursT: ऐसा इसलिए है इस सवाल का मुद्दा नहीं - हालांकि दिया गया है, प्रश्न में दिया गया उदाहरण कोड सबसे अच्छा नहीं है। यह और भी होता है [यहां] (https://jsfiddle.net/on2oynvz/1/)। 'संदर्भ त्रुटि' के संबंध में, कम से कम [यह प्रश्न] (http://stackoverflow.com/q/9981104/50079) है जो इसे कवर करता है जिसे मैं जानता हूं क्योंकि मेरे पास भी एक जवाब है। – Jon

2

यह परीक्षण हमेशा आशा अनुरूप काम होगा:

typeof a === 'undefined' 

के बाद से undefined का मूल्य बदला जा सकता है, इन तरह के परीक्षण हमेशा विश्वसनीय नहीं होते हैं:

a = {} 
a.b === undefined 

उन मामलों में आप के बजाय void 0 के खिलाफ परीक्षण कर सकते हैं:

a.b === void 0 
// true 

हालांकि, इस एकल चर परीक्षण के लिए काम नहीं करेगा:

a === void 0 // <-- error: cannot find 'a' 

आपको लगता है कि window.a के खिलाफ परीक्षण द्वारा आसपास काम कर सकता था, लेकिन पहले विधि को प्राथमिकता दी जानी चाहिए।

0

मेरा मानना ​​है कि सबसे आम मामलों में, उदा। जब कोई फ़ंक्शन किसी फ़ंक्शन के माध्यम से पारित किया जाता है, तो myVar === undefined पर्याप्त है, क्योंकि MyVar को हमेशा पैरामीटर

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

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