मैं यह जाँचना चाहता था कि चर परिभाषित किया गया है या नहीं। उदाहरण के लिए, निम्नलिखित एक नहीं परिभाषित त्रुटि फेंकता है
alert( x );
मैं इस त्रुटि को कैसे पकड़ सकता हूं?
मैं यह जाँचना चाहता था कि चर परिभाषित किया गया है या नहीं। उदाहरण के लिए, निम्नलिखित एक नहीं परिभाषित त्रुटि फेंकता है
alert( x );
मैं इस त्रुटि को कैसे पकड़ सकता हूं?
जवाबों:
जावास्क्रिप्ट में, null
एक वस्तु है। वहाँ चीजें हैं जो मौजूद नहीं है के लिए एक और मूल्य, है undefined
। DOM null
लगभग सभी मामलों के लिए वापस लौटता है जहां यह दस्तावेज़ में कुछ संरचना खोजने में विफल रहता है, लेकिन जावास्क्रिप्ट में ही undefined
इसका उपयोग किया जाता है।
दूसरा, नहीं, कोई प्रत्यक्ष समकक्ष नहीं है। यदि आप वास्तव में विशेष रूप से के लिए जाँच करना चाहते हैं null
, तो:
if (yourvar === null) // Does not execute if yourvar is `undefined`
यदि आप जाँचना चाहते हैं कि क्या कोई चर मौजूद है, जो केवल try
/ के साथ किया जा सकता है catch
, क्योंकि typeof
एक अघोषित चर का इलाज करेगा और एक चर के undefined
बराबर मूल्य के साथ घोषित किया जाएगा ।
लेकिन, जांच करने के लिए अगर एक चर घोषित किया जाता है और नहीं है undefined
:
if (yourvar !== undefined) // Any scope
पहले, typeof
सुरक्षित रूप से अपरिभाषित की जांच करने के लिए ऑपरेटर का उपयोग करना आवश्यक था , क्योंकि यह undefined
एक चर की तरह पुन: असाइन करना संभव था । पुराने तरीके से इस तरह देखा:
if (typeof yourvar !== 'undefined') // Any scope
undefined
ईसीएमएस्क्रिप्ट 5 में पुन: असाइन किए जाने का मुद्दा तय किया गया था, जिसे 2009 में जारी किया गया था। अब आप सुरक्षित रूप से उपयोग कर सकते हैं ===
और बिना उपयोग किए !==
परीक्षण कर सकते हैं जैसा कि केवल कुछ समय के लिए पढ़ा गया है।undefined
typeof
undefined
यदि आप यह जानना चाहते हैं कि क्या कोई सदस्य स्वतंत्र है, लेकिन इसकी कीमत क्या है, इसकी परवाह न करें:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
यदि आप जानना चाहते हैं कि क्या एक चर सत्य है :
if (yourvar)
typeof
ऑपरेटर ( typeof null == 'object'
) है। null
मूल्य एक है आदिम मूल्य , जिनमें से केवल मूल्य है अशक्त प्रकार ।
वास्तव में परीक्षण करने का एकमात्र तरीका अगर एक चर undefined
निम्नलिखित करना है। याद रखें, अपरिभाषित जावास्क्रिप्ट में एक वस्तु है।
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
इस धागे के कुछ अन्य समाधान आपको विश्वास दिलाएंगे कि एक चर अपरिभाषित है भले ही इसे परिभाषित किया गया हो (उदाहरण के लिए NULL या 0 के मान के साथ)।
ReferenceError
।
undefined
यह कहना कि जावास्क्रिप्ट में एक वस्तु गलत सूचना है। क्या यह कथन वैसे भी आपके उत्तर से संबंधित है? यह एक undefined
प्रकार का मान है undefined
, जिसे नामित वैश्विक पहचानकर्ता को सौंपा गया है undefined
।
undefined
ES5 के बाद से आसानी से पढ़ा गया है। आप if (x === undefined) {...}
इस तरह से शॉर्टहैंड का उपयोग करके या बिना उपयोग किए सुरक्षित रूप से परीक्षण कर सकते हैं if (x === void 0)
:।
तकनीकी रूप से, उचित समाधान है (मेरा मानना है):
typeof x === "undefined"
आप कभी-कभी आलसी हो सकते हैं और उपयोग कर सकते हैं
x == null
लेकिन यह दोनों अपरिभाषित चर x, और एक चर x शून्य युक्त अनुमति देता है, सच लौटने के लिए।
var x;
और फिर typeof x;
आप "undefined"
वैसे ही प्राप्त करेंगे जैसे आपने किया थाtypeof lakjdflkdsjflsj;
इससे भी आसान और अधिक शॉर्टहैंड संस्करण होगा:
if (!x) {
//Undefined
}
या
if (typeof x !== "undefined") {
//Do something since x is defined.
}
मैंने अक्सर किया है:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
आप टर्नरी सशर्त-ऑपरेटर का भी उपयोग कर सकते हैं:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
? आपको यह देखना चाहिए कि यदि a===undefined
इसके बजाय
var x;
ऊपर कर एक त्रुटि फेंक देंगे
!a
सच के लिए परीक्षण undefined
, यह भी के लिए सच का परीक्षण करती है 0
और null
और false
। यह बहुत गलत है और इसे हटाया जाना चाहिए।
मैं अक्सर सबसे सरल तरीके का उपयोग करता हूं:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
संपादित करें:
वैरिएबल को इनिशियलाइज़ किए बिना, अपवाद को फेंक दिया जाएगा "अनक्रीफ़्ड रेफ़रेंस एरर: वेरिएबल डिफाइन नहीं है ..."
Uncaught ReferenceError: variable is not defined
variable
द्वारा परिभाषित किया गया है var variable;
। और यह स्निपेट variable
स्थानीय दायरे में ओवरराइड हो जाएगा । यह तर्क को तोड़ सकता है जो एक करीबी या वैश्विक चर तक पहुंचने की उम्मीद करता है। Ie:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
एक अन्य संभावित "समाधान" window
वस्तु का उपयोग करना है। यह एक ब्राउज़र में जब संदर्भ त्रुटि समस्या से बचा जाता है।
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
। ऐसा नहीं करेगा।
त्रुटि आपको बता रही है कि x
मौजूद नहीं है! यह घोषित नहीं किया गया है , जो एक मान निर्दिष्ट किए जाने से अलग है ।
var x; // declaration
x = 2; // assignment
यदि आपने घोषित किया x
, तो आपको कोई त्रुटि नहीं मिलेगी। आपको एक चेतावनी मिलेगी जो कहती है undefined
क्योंकिx
मौजूद है / घोषित किया गया है लेकिन एक मान निर्दिष्ट नहीं किया गया है।
यह जाँचने के लिए कि क्या चर घोषित किया गया है, आप उपयोग कर सकते हैं typeof
, यदि चर मौजूद है तो जाँच की कोई अन्य विधि भी वही त्रुटि उठाएगी जो आपको शुरू में मिली थी।
if(typeof x !== "undefined") {
alert(x);
}
यह में संग्रहीत मान के प्रकार की जाँच कर रहा है x
। यह केवल तभी वापस आएगा undefined
जब x
घोषित नहीं किया गया है या यदि यह घोषित नहीं किया गया है और अभी तक सौंपा नहीं गया है।
typeof
ऑपरेटर की आवश्यकता नहीं है ।
void
ऑपरेटर रिटर्न undefined
किसी भी तर्क / अभिव्यक्ति के लिए यह करने के लिए पारित कर दिया। ताकि आप परिणाम के खिलाफ परीक्षण कर सकते हैं (वास्तव में कुछ minifiers से अपने कोड को बदलने undefined
के लिएvoid 0
को बचाने के )
उदाहरण के लिए:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
और सोच undefined
को फिर से सौंपा जा सकता है, जो लगभग एक दशक तक संभव नहीं है।
undefined
भरोसा दिया था , तो ईश्वर ही जानता है कि क्या कारण है, इसका उपयोग करने से void 0
आपको कोई रिटर्न नहीं मिलेगाundefined
।
हम undefined
निम्नानुसार जांच कर सकते हैं
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
स्वीकृत उत्तर सही है। बस एक और विकल्प जोड़ना चाहता था। आप try ... catch
इस स्थिति को संभालने के लिए ब्लॉक का भी उपयोग कर सकते हैं । एक अजीब उदाहरण:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
catch
ब्लॉक से अवगत रहें , जो थोड़ा गड़बड़ है, क्योंकि यह ब्लॉक-स्तरीय गुंजाइश बनाता है। और, ज़ाहिर है, पूछे गए प्रश्न का उत्तर देने के लिए उदाहरण बेहद सरल है, यह त्रुटि हैंडलिंग में सर्वोत्तम प्रथाओं को कवर नहीं करता है;)।
मैं एक छोटे से फ़ंक्शन का उपयोग करता हूं यह सत्यापित करने के लिए कि एक चर घोषित किया गया है, जो वास्तव में मेरी जावास्क्रिप्ट फ़ाइलों में अव्यवस्था की मात्रा में कटौती करता है। मैं यह सुनिश्चित करने के लिए मान के लिए एक जांच जोड़ता हूं कि चर न केवल मौजूद है, बल्कि एक मान भी सौंपा गया है। दूसरी स्थिति यह जांचती है कि क्या चर को भी तुरंत बदल दिया गया है, क्योंकि यदि चर को परिभाषित किया गया है, लेकिन तात्कालिक नहीं (नीचे उदाहरण देखें), यह अभी भी एक त्रुटि फेंक देगा यदि आप संदर्भ की कोशिश करते हैं तो यह आपके कोड में मूल्य है।
var my_variable;
त्वरित नहीं - त्वरित -var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
फिर आप यह जांचने के लिए एक सशर्त विवरण का उपयोग कर सकते हैं कि चर को इस तरह परिभाषित और तात्कालिक रूप से परिभाषित किया गया है ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
या परीक्षण करने के लिए कि यह परिभाषित नहीं किया गया है और तत्काल उपयोग ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"