वहाँ'अपरिभाषित' के खिलाफ मूल्य की तुलना करने का सबसे अच्छा तरीका क्या है?
var a;
(a == undefined)
(a === undefined)
((typeof a) == "undefined")
((typeof a) === "undefined")
कौन सा हम का उपयोग करना चाहिए के बीच कोई अंतर है?
वहाँ'अपरिभाषित' के खिलाफ मूल्य की तुलना करने का सबसे अच्छा तरीका क्या है?
var a;
(a == undefined)
(a === undefined)
((typeof a) == "undefined")
((typeof a) === "undefined")
कौन सा हम का उपयोग करना चाहिए के बीच कोई अंतर है?
विडंबना यह है कि undefined
जावास्क्रिप्ट में नए सिरे से परिभाषित किया जा सकता है, उनके सही मन में किसी को भी है कि क्या करना होगा नहीं है कि उदाहरण के लिए,:
undefined = "LOL!";
जो बिंदु पर undefined
के खिलाफ भविष्य की सभी समानता चेकों अप्रत्याशित परिणाम उपज जाएगा!
==
और ===
(समानता ऑपरेटर) के बीच अंतर के रूप में, == दूसरे करने के लिए एक प्रकार से मूल्यों को विवश करने का प्रयास करेंगे, अंग्रेजी में इसका मतलब है कि 0 == "0"
सच है भले ही प्रकार के अलग (बनाम स्ट्रिंग संख्या का मूल्यांकन करेंगे) - डेवलपर इस प्रकार की ढीली समानता से बचते हैं क्योंकि इससे आपके कोड में त्रुटियों को डीबग करना मुश्किल हो सकता है।
एक परिणाम यह उपयोग करने के लिए सबसे सुरक्षित है के रूप में:
"undefined" === typeof a
जब undefinedness के लिए जाँच :)
({tries undefined = true}) उनके में कौन ... क्यों ... एएएचजी! कुछ क्यों होगा? यह एक्मास्क्रिप्ट की एक वास्तविक विफलता है। मैंने कभी ऐसा करने के लिए सोचा नहीं था। – cwallenpoole
मेरे उदाहरण के अनुसार, 'teh lolz!' के लिए EcmaScript (कोडनामयुक्त सद्भावना) के अगले पुनरावृत्ति में स्थिरांक के लिए समर्थन शामिल होगा, जो केवल हमारी स्वच्छता के लिए एक अच्छी बात हो सकती है;) http://wiki.ecmascript.org/doku.php?id=harmony%3aconst – JonnyReeves
यह लिंक है आपके उत्तर के पहले भाग में: http://stackoverflow.com/questions/2703102/typeof-undefined-vs-null/2703131#2703131 – JohnJohnGa
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
बेशक - सवाल मतभेदों के बारे में नहीं है - – JohnJohnGa
@ जॉन जॉन अच्छी तरह से वे सभी एक ही चीज़ उत्पन्न करते हैं जिसमें कोई 'अंतर' नहीं होता है। लेकिन मेरा मानना है कि सबसे अच्छा शर्त आपका दूसरा विकल्प है। – Neal
आप 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()
}
}
: यह इस स्थिति में विशेष रूप से उपयोगी है।
(typeof a) === "undefined"
का उपयोग करें।
वह एक त्रुटि क्यों हल करेगा ?? – Neal
गाह, आप सही हैं, मैंने ओपी के कोड की शुरुआत में "var a" को याद किया। –
मैं व्यक्तिगत रूप से पसंद शून्य मान के लिए भी जांच करने के लिए
[undefined, null].indexOf(variable) > -1
उपयोग करने के लिए।
आप ऊपर उल्लेख उपयोग करना चाहिए:
"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
http://stackoverflow.com/q/2703102/469210 इस मुद्दे के लिए प्रासंगिक लगती है। – borrible
संभावित डुप्लिकेट [जावास्क्रिप्ट: अपरिभाषित! == अपरिभाषित?] (Http://stackoverflow.com/questions/776950/javascript-undefined-undefined) –