मैं यह जाँचना चाहता था कि चर परिभाषित किया गया है या नहीं। उदाहरण के लिए, निम्नलिखित एक नहीं परिभाषित त्रुटि फेंकता है
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 में जारी किया गया था। अब आप सुरक्षित रूप से उपयोग कर सकते हैं ===और बिना उपयोग किए !==परीक्षण कर सकते हैं जैसा कि केवल कुछ समय के लिए पढ़ा गया है।undefinedtypeofundefined
यदि आप यह जानना चाहते हैं कि क्या कोई सदस्य स्वतंत्र है, लेकिन इसकी कीमत क्या है, इसकी परवाह न करें:
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।
undefinedES5 के बाद से आसानी से पढ़ा गया है। आप 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"