2011-08-18 9 views
9

वहाँ'अपरिभाषित' के खिलाफ मूल्य की तुलना करने का सबसे अच्छा तरीका क्या है?

var a; 
(a == undefined) 
(a === undefined) 
((typeof a) == "undefined") 
((typeof a) === "undefined") 

कौन सा हम का उपयोग करना चाहिए के बीच कोई अंतर है?

+0

http://stackoverflow.com/q/2703102/469210 इस मुद्दे के लिए प्रासंगिक लगती है। – borrible

+1

संभावित डुप्लिकेट [जावास्क्रिप्ट: अपरिभाषित! == अपरिभाषित?] (Http://stackoverflow.com/questions/776950/javascript-undefined-undefined) –

उत्तर

11

विडंबना यह है कि undefined जावास्क्रिप्ट में नए सिरे से परिभाषित किया जा सकता है, उनके सही मन में किसी को भी है कि क्या करना होगा नहीं है कि उदाहरण के लिए,:

undefined = "LOL!"; 

जो बिंदु पर undefined के खिलाफ भविष्य की सभी समानता चेकों अप्रत्याशित परिणाम उपज जाएगा!

== और === (समानता ऑपरेटर) के बीच अंतर के रूप में, == दूसरे करने के लिए एक प्रकार से मूल्यों को विवश करने का प्रयास करेंगे, अंग्रेजी में इसका मतलब है कि 0 == "0" सच है भले ही प्रकार के अलग (बनाम स्ट्रिंग संख्या का मूल्यांकन करेंगे) - डेवलपर इस प्रकार की ढीली समानता से बचते हैं क्योंकि इससे आपके कोड में त्रुटियों को डीबग करना मुश्किल हो सकता है।

एक परिणाम यह उपयोग करने के लिए सबसे सुरक्षित है के रूप में:

"undefined" === typeof a 

जब undefinedness के लिए जाँच :)

+2

({tries undefined = true}) उनके में कौन ... क्यों ... एएएचजी! कुछ क्यों होगा? यह एक्मास्क्रिप्ट की एक वास्तविक विफलता है। मैंने कभी ऐसा करने के लिए सोचा नहीं था। – cwallenpoole

+0

मेरे उदाहरण के अनुसार, 'teh lolz!' के लिए EcmaScript (कोडनामयुक्त सद्भावना) के अगले पुनरावृत्ति में स्थिरांक के लिए समर्थन शामिल होगा, जो केवल हमारी स्वच्छता के लिए एक अच्छी बात हो सकती है;) http://wiki.ecmascript.org/doku.php?id=harmony%3aconst – JonnyReeves

+0

यह लिंक है आपके उत्तर के पहले भाग में: http://stackoverflow.com/questions/2703102/typeof-undefined-vs-null/2703131#2703131 – JohnJohnGa

0
var a; 
(a == undefined) //true 
(a === undefined) //true 
((typeof a) == "undefined") //true 
((typeof a) === "undefined") //true 

लेकिन:

var a; 
(a == "undefined") //false 
(a === "undefined") //false 
((typeof a) == undefined) //false 
((typeof a) === undefined) //false 
+0

बेशक - सवाल मतभेदों के बारे में नहीं है - – JohnJohnGa

+0

@ जॉन जॉन अच्छी तरह से वे सभी एक ही चीज़ उत्पन्न करते हैं जिसमें कोई 'अंतर' नहीं होता है। लेकिन मेरा मानना ​​है कि सबसे अच्छा शर्त आपका दूसरा विकल्प है। – Neal

-2

आप var a घोषित है, तो यह किसी भी अधिक अपरिभाषित नहीं किया जाएगा - यह null बजाय हो जाएगा। मैं आमतौर पर typeof a == undefined का उपयोग करता हूं - और यह ठीक काम करता है। यदि एक अपरिभाषित है, तो

a == undefined 

वास्तव में एक त्रुटि फेंक होगा

function myfunc(myvar) 
{ 
    if(typeof myvar == "undefined") 
    { 
     //the function was called without an argument, simply as myfunc() 
    } 
} 
+0

['typeof'] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/typeof) एक स्ट्रिंग देता है। – Shef

+0

कि यदि कथन 'गलत' होगा - 'टाइपोफ़' एक स्ट्रिंग मान देता है। – Neal

+0

ठीक है, मैंने इसे आज उत्पादन प्रणाली में उपयोग किया - और यह पूरी तरह से अच्छी तरह से काम करता है। –

-1

: यह इस स्थिति में विशेष रूप से उपयोगी है।

(typeof a) === "undefined" 

का उपयोग करें।

+0

वह एक त्रुटि क्यों हल करेगा ?? – Neal

+1

गाह, आप सही हैं, मैंने ओपी के कोड की शुरुआत में "var a" को याद किया। –

1

मैं व्यक्तिगत रूप से पसंद शून्य मान के लिए भी जांच करने के लिए

[undefined, null].indexOf(variable) > -1 

उपयोग करने के लिए।

0

आप ऊपर उल्लेख उपयोग करना चाहिए:

"undefined" === typeof a 

लेकिन अगर आप की जाँच करने के चर के बहुत सारे है, तो आपके कोड कुछ बिंदु पर बदसूरत प्राप्त कर सकते हैं, तो आप जावा के दृष्टिकोण का उपयोग करने पर विचार हो सकता है:

try { vvv=xxx; zzz=yyyy; mmm=nnn; ooo=ppp; } 
catch(err){ alert(err.message); } 

स्पष्ट रूप से चेतावनी() को उत्पादन संस्करण में उपयोग नहीं किया जाना चाहिए, लेकिन डिबगिंग संस्करण में यह बहुत उपयोगी है। यह IE 6 जैसे पुराने ब्राउज़रों में भी काम करना चाहिए:

https://msdn.microsoft.com/library/4yahc5d8%28v=vs.94%29.aspx

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

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