यदि कोई चर 'अपरिभाषित' या 'अशक्त' है, तो मैं कैसे निर्धारित कर सकता हूं?


2126

यदि चर undefinedया है, तो मैं कैसे निर्धारित करूं null?

मेरा कोड इस प्रकार है:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

लेकिन अगर मैं ऐसा करता हूं, तो जावास्क्रिप्ट दुभाषिया निष्पादन को रोक देता है।


जवाबों:


2846

आप ऐसा करने के लिए अमूर्त समानता ऑपरेटर के गुणों का उपयोग कर सकते हैं :

if (variable == null){
    // your code here.
}

क्योंकि null == undefinedसच है, इसके बाद के संस्करण कोड दोनों पकड़ेगा nullऔर undefined


5
मैं यह जांचने की कोशिश कर रहा हूं कि क्या घटना फ़ायरफ़ॉक्स में अशक्त है और एक त्रुटि निष्पादन को
रोकती

3
@MichaelFever कैसे काम नहीं करता है? इसे अपने कंसोल में कॉपी पेस्ट करें: const y = undefined; y == null;इसे वापस आ जाना चाहिएtrue
Seraf

2
@ChrisStryczynski उदाहरण में आपकी टिप्पणी से आपने yनिरंतर घोषित किया , लेकिन आप तुलना abcनहीं कर रहे हैं y। जब मैं परीक्षण किया yके माध्यम से console.log(y == null);पर Chrome और Firefox मुझे मिल गया trueपरिणाम के रूप में। यदि आपको त्रुटि मिली है, तो हो सकता है कि आपने =तुलना के बजाय असाइनमेंट ऑपरेटर का उपयोग करने की कोशिश की, ==जो कि त्रुटि को वापस करने के लिए समझ में आएगा क्योंकि constपुन: असाइन नहीं किया जा सकता है।
Pshemo

2
प्रासंगिक तुलना का जीवंत उदाहरण । LGTM।
रयान हेनिंग

2
@ZaytsevDmitry यदि आप वैरिएबल के बराबर है nullया undefinedवैरिएबल के बराबर है तो आप टेस्ट की उम्मीद क्यों करेंगे 0? सवाल एक सत्य मूल्य के लिए परीक्षण के बारे में नहीं है, बल्कि इसके लिए nullया तो स्पष्ट रूप से परीक्षण है undefined
रॉडरिगो-सिल्वेरा

1106

पकड़ने का मानक तरीका nullऔर undefinedसाथ ही यह है:

if (variable == null) {
     // do something 
}

- जो 100% अधिक स्पष्ट लेकिन कम संक्षिप्त के बराबर है:

if (variable === undefined || variable === null) {
     // do something 
}

पेशेवर JS लिखते समय, यह उस प्रकार की समानता के===== लिए लिया जाता है और बनाम के व्यवहार को समझा जाता है। इसलिए हम उपयोग करते हैं ==और केवल तुलना करते हैं null


फिर से संपादित करें

उपयोग का सुझाव देने वाली टिप्पणियां typeofकेवल गलत हैं। यदि चर मौजूद नहीं है, तो हाँ, ऊपर दिया गया मेरा समाधान एक रेफरेंस का कारण बनेगा। यह एक अच्छी बात है। यह ReferenceError वांछनीय है: यह आपकी गलतियों को खोजने और आपके कोड को जहाज करने से पहले उन्हें ठीक करने में मदद करेगा, जैसे कंपाइलर की त्रुटियां अन्य भाषाओं में होती हैं। उपयोग करें try/catch यदि आप इनपुट के साथ काम कर रहे हैं तो आपका नियंत्रण नहीं है।

आपके पास अपने कोड में अघोषित चर का कोई संदर्भ नहीं होना चाहिए।


47
यह एक ReferenceError और ब्रेक निष्पादन का कारण होगा यदि चर को परिभाषित नहीं किया गया है या कोड में बिल्कुल भी संदर्भित नहीं है, तो टाइपोफ़ का उपयोग करना सुरक्षित है।
मणि गंधम

56
यह एक शैलीगत बिंदु से अधिक है। चर पर घोषित नहीं किया गया है सभी , कि लेखक की ओर से वास्तव में सिर्फ बुरा लेखन है। आपको पता होना चाहिए कि आपका चर घोषित किया गया है या नहीं, यह सवाल नहीं होना चाहिए। लेकिन हाँ , यदि किसी कारण से ऐसा है, तो इसे केवल चर के बजाय window.variable में बदल दिया जाना चाहिए , जिससे संदर्भ त्रुटि नहीं होगी। टाइपोफ से बचना चाहिए।
temporary_user_name

6
हां क्योंकि आपने !==इसके बजाय लिखा था !=
temporary_user_name

9
-ओपी: "100% समतुल्य" होने की तुलना करने वालों के बारे में कथन SIMPLY WRONG है, जैसा कि आपने अपने EDIT में उल्लेख किया है, दूसरा एक ReferenceError का कारण बनेगा। मुखरता के लिए: "आपके कोड में अघोषित चर का कोई संदर्भ नहीं होना चाहिए।" वास्तव में? कभी वैकल्पिक पैरामीटर के बारे में सुना है? jsfiddle.net/3xnbxfsu
टिमोथी कांसकी

16
यदि उन्हें वैकल्पिक रूप से प्रदान नहीं किया जाता है, तो @TimothyKanski वैकल्पिक पैरामीटर अपरिभाषित हो सकते हैं, लेकिन वे निश्चित रूप से घोषित चर हैं। इन्हें घोषित किया गया है और इनका मूल्य है undefined, जैसा कि किसी भी घोषित लेकिन असंबद्ध वैरिएबल में होगा, यानी var someVar;आपका तर्क वास्तव में पकड़ में नहीं आता है
chiliNUT

227

उपरोक्त उत्तरों को मिलाकर, ऐसा लगता है कि सबसे पूर्ण उत्तर होगा:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

यह किसी भी चर के लिए काम करना चाहिए जो या तो अघोषित या घोषित है और स्पष्ट रूप से अशक्त या अपरिभाषित है। बूलियन अभिव्यक्ति को किसी भी घोषित चर के लिए गलत मूल्यांकन करना चाहिए जिसका वास्तविक गैर-शून्य मान है।


2
@Aerovistae मैं मानता हूं कि typeofएक ऑपरेटर है, एक फ़ंक्शन नहीं है, इसलिए इसे कोष्ठकों की आवश्यकता नहीं है, लेकिन मैं फिर भी कोष्ठक की सराहना करता हूं - केवल स्पष्टता पढ़ने के लिए।
user664833

1
क्या सीधे जाँच के बारे में अगर (चर === अपरिभाषित) टाइपोफ का उपयोग करने के बजाय?
जमे हुए क्रेयॉन

2
@ArjunU कि एक संदर्भError का कारण होगा अगर चर घोषित नहीं किया गया है। यदि आप नहीं जानते कि एक चर घोषित किया गया है या नहीं, तो उपरोक्त समाधान का उपयोग करें। यदि आप गारंटी दे सकते हैं कि चर कम से कम घोषित है, तो आप उपयोग कर सकते हैंvariable == null
दुष्ट

3
यह एक बेहतर उपाय है क्योंकि @Rogue के अनुसार, चर घोषित नहीं किया जा सकता है।
अब्दुल सदीक यासीन

अगर मैं गलत हूं तो मुझे सुधारो, लेकिन क्या पहली शर्त दूसरी वाली का सुपरसेट नहीं है, और इसलिए दूसरी शर्त बड़ी है?
मार्च हो

186
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}

14
अगर किसी को लगता है कि यह एक और आधा जवाब है, तो यह वास्तव में काम करता है। undefinedके बराबर मूल्यांकन करता है null
चक

3
क्रोम कंसोल में मेरे साथ विफल ... ReferenceError: वेरिएबल को परिभाषित नहीं किया गया है, इसलिए यह काम कर सकता है, लेकिन मेरे लिए नहीं ...
Eran Medan

48
यह केवल घोषित चर के लिए काम करता है, चर नहीं जो घोषित हो सकता है या नहीं हो सकता है, जो शायद ही कभी होता है। (आपको उस मामले के लिए

11
बस आपको लगा कि आप इस टिप्पणी को जोड़ सकते हैं: /*jshint eqnull:true */अपने जेएस दस्तावेज़ या फ़ंक्शन के शीर्ष पर, और JSHint आपको आपके उपयोग के बारे में चेतावनी देना बंद कर देगा == null
वेब_डिजाइनर

3
@Aerovistae आप मुझे एक संदर्भ में इंगित कर सकते हैं जो स्पष्ट रूप ==से टूट गया है। if(variable == null)इस जवाब में जबरदस्ती मुझे पूरी तरह समझ में आती है ...
बेन एस्टन

93
if (typeof EmpName != 'undefined' && EmpName) {

अगर मूल्य नहीं है तो सच का मूल्यांकन करेंगे:

  • शून्य

  • अपरिभाषित

  • NaN

  • खाली स्ट्रिंग ("")

  • 0

  • असत्य


13
मुझे लगता है कि यह एक खतरनाक तकनीक है जो जंगली आग की तरह फैल गई है। क्योंकि बहुत सारे चर जो चेक किए गए हैं वे बूलियन या संख्या हो सकते हैं। इसलिए यदि उपयोगकर्ता परिणामों को पूरी तरह से नहीं समझता है, तो यह अच्छा नहीं है।
उपयोगीबाई

कृपया इस जावास्क्रिप्ट
जासूसी

1
यह भी ऐसा ही है if (EmpName)। यदि यह undefinedपहले से ही मिथ्या होगा।
रूडी

यदि चर को परिभाषित नहीं किया गया है। तो अगर (EmpName) त्रुटि फेंक होगा
Thamaraiselvam

1
@Thamaraiselvam मुझे लगता है कि रूडी का मतलब यह हो सकता है var EmpName; if (EmpName)। जहां चर को परिभाषित किया गया है, लेकिन एक मान नहीं सौंपा गया है।
भूख लगी

27

jQuery attr()समारोह रिटर्न या तो एक खाली स्ट्रिंग या वास्तविक मूल्य (और कभी नहीं nullया undefined)। undefinedजब आपके चयनकर्ता ने कोई तत्व नहीं लौटाया है, तो केवल यही समय है ।

तो आप एक रिक्त स्ट्रिंग के खिलाफ परीक्षण करना चाह सकते हैं। वैकल्पिक रूप से, चूंकि रिक्त तार, अशक्त और अपरिभाषित झूठे-वाई हैं, आप बस ऐसा कर सकते हैं:

if (!EmpName) { //do something }

1
क्रोम 17.0.963.78 मीटर यह त्रुटि देता है:ReferenceError: EmpName is not defined
एरन मेडन

6
@EranMedan मुझे पता है कि यह देर हो चुकी है, लेकिन यह उम्मीद है कि बाद में आने वाले लोगों की मदद करेगा। आपको त्रुटि मिलने का कारण यह है कि इसे घोषित नहीं किया गया है। आम तौर पर आपके पास EmpName (या कुछ अन्य चर) एक फ़ंक्शन में, या किसी अन्य फ़ंक्शन का रिटर्न मान होगा और इसलिए घोषित किया जाता है (उदाहरण: "var x;")। यह परीक्षण करने के लिए कि क्या यह अपरिभाषित, या अशक्त, या रिक्त स्ट्रिंग लौटा है, आप उपरोक्त समाधान का उपयोग कर सकते हैं।
डेव

मुझे लगता है कि यह एक ठंडा सवाल है, लेकिन jQuery वापस आ जाएगा undefinedयदि विशेषता तत्व पर मौजूद नहीं है (न केवल अगर चयनकर्ता के पास कोई मिलान तत्व नहीं है, तो उत्तर के अनुसार)। उदाहरण के लिए, imgकोई नहीं के साथ के लिए srcलौटेगाundefined$('img').attr('src');
कोडिंगहैंड्स

19

मैं इसके लिए अपना फंक्शन लिखने आया हूं। जावास्क्रिप्ट अजीब है।

यह सचमुच कुछ भी पर प्रयोग करने योग्य है। (ध्यान दें कि यह भी जाँचता है कि क्या चर में कोई उपयोग करने योग्य मूल्य हैं । लेकिन चूँकि यह जानकारी आमतौर पर भी आवश्यक है, मुझे लगता है कि यह पोस्ट करने के लायक है)। कृपया नोट छोड़ने पर विचार करें।

function empty(v) {
    let type = typeof v;
    if (type === 'undefined') {
        return true;
    }
    if (type === 'boolean') {
        return !v;
    }
    if (v === null) {
        return true;
    }
    if (v === undefined) {
        return true;
    }
    if (v instanceof Array) {
        if (v.length < 1) {
            return true;
        }
    } else if (type === 'string') {
        if (v.length < 1) {
            return true;
        }
        if (v === '0') {
            return true;
        }
    } else if (type === 'object') {
        if (Object.keys(v).length < 1) {
            return true;
        }
    } else if (type === 'number') {
        if (v === 0) {
            return true;
        }
    }
    return false;
}

टाइपप्रति संगत।


यह फ़ंक्शन ठीक उसी तरह करना चाहिए जैसे PHP का empty()फ़ंक्शन (देखें)RETURN VALUES )

समझता है undefined, null, false, 0, 0.0, "0" {}, []के रूप में खाली।

"0.0", NaN, " ", trueगैर खाली माना जाता है।


2
मैं थोड़ा अशक्त जाँच समस्या में चला गया हूँ। मैं जांचना चाहता हूं कि क्या कोई पैरामीटर पास किया जा रहा है या अशक्त है या कोई खाली वस्तु है { }। यह एक सामान्य और मूर्खतापूर्ण भाषा की समस्या है, लेकिन मैं इसके बारे में भूल गया था। मेरी सभी खोजें शून्य मान की अपरिभाषित या ढीली समानता तुलना (==) के लिए उत्तर दिखाती हैं, लेकिन सख्त समानता (===) या समकक्ष नहीं है। और फिर यहाँ पृष्ठ के बहुत नीचे आपके -1 रैंक वाले उत्तर में (इससे पहले कि मैं उखाड़ा गया) वह उत्तर है जिसने मुझे निरस्त कर दिया। Object.keys( obj ).length < 1या हो सकता है === 0, यह मानते हुए कि यह कभी नहीं होगा -1। वैसे भी, 0 तक अपवित्र, वू। : पी

धन्यवाद, मैं इस फ़ंक्शन को छोड़ने और बहुत सारे कोड को साफ करने में सक्षम हूं। क्यों यह एक मानक नहीं है जेएस फ़ंक्शन मेरे से परे है।
एंडी

3
आपको अपने सभी== को ===यहां बदलना चाहिए , फिर यह एक उचित कार्य होगा।
बेन मैकइंटायर

12

यदि आप जिस चर की जांच करना चाहते हैं वह एक वैश्विक है, करो

if (window.yourVarName) {
    // Your code here
}

यह जाँचने का तरीका yourVarNameचर नहीं होने पर भी कोई त्रुटि नहीं करेगा ।

उदाहरण: मैं जानना चाहता हूं कि क्या मेरा ब्राउज़र इतिहास एपीआई का समर्थन करता है

if (window.history) {
    history.back();
}

यह कैसे काम करता है:

windowएक ऐसी वस्तु है जो सभी वैश्विक चरों को अपने गुणों के रूप में रखती है, और जावास्क्रिप्ट में यह गैर-मौजूदा वस्तु संपत्ति तक पहुंचने का प्रयास करने के लिए कानूनी है। यदि historyअस्तित्व में नहीं है तो window.historyवापस लौटता है undefinedundefinedयह गलत है, इसलिए किसी if(undefined){}ब्लॉक में कोड नहीं चलेगा।


2
पाठकों को ध्यान देना चाहिए कि चेक के लिए इस तरह का एक दृष्टिकोण मुहावरेदार है - एक ब्राउज़र में चलने वाले जावास्क्रिप्ट से - चाहे एक वैश्विक चर घोषित किया गया हो, और विशेष रूप से एक ब्राउज़र-प्रदान किया गया वैश्विक (जैसे इतिहास एपीआई) उपलब्ध हो। यह जाँचने के लिए काम नहीं करेगा कि एक गैर-वैश्विक चर है nullया नहीं undefined, और न ही यह काम करेगा कि आपका जावास्क्रिप्ट एक ब्राउज़र के बाहर चल रहा है (यानी Node.js में)। यह भी इलाज वैश्विक करने के लिए सेट हो जाएगा 0, falseया ''उन जो या अघोषित कर रहे हैं के रूप में ही undefinedया null, जो आमतौर पर ठीक है।
मार्क अमेरी

यह मानता है कि स्क्रिप्ट एक ब्राउज़र में चल रही है। यह एक दिया नहीं है।
GreenAsJade

12

सबसे छोटा और सबसे आसान:

if(!EmpName ){
 // DO SOMETHING
}

यदि यह सही है तो इसका मूल्यांकन सही होगा:

  • शून्य
  • अपरिभाषित
  • NaN
  • खाली
  • स्ट्रिंग ("")
  • 0
  • असत्य

3
यहां केस का उपयोग यह है कि मैं अपरिभाषित और गलत के बीच का अंतर जानना चाहता हूं। मैं तब नल पर चेक का उपयोग करूंगा।
Gast128

11

संभवतः ऐसा करने का सबसे छोटा तरीका है:

if(EmpName == null) { /* DO SOMETHING */ };

यहाँ सबूत है:

और यहाँ के बारे में अधिक विवरण हैं ==( यहाँ स्रोत )

यहां छवि विवरण दर्ज करें

बोनस : कारण क्यों ===अधिक स्पष्ट है ==( agc उत्तर पर गौर करें )

यहां छवि विवरण दर्ज करें


8

मुझे अभी यह समस्या हुई है अर्थात यदि कोई वस्तु अशक्त है तो जाँच करें।
मैं बस इस का उपयोग करें:

if (object) {
    // Your code
}

उदाहरण के लिए:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}

3
var A = document.getElementById ("enterJob") सेट करना बेहतर होगा, अगर (A) A.className + = 'current'; इस तरह आप एक ही परिणाम के लिए 50% काम करते हैं ... लेकिन शायद आपने इसे केवल शो के लिए किया और फिर मैं सलाम करता हूं।
हैरी स्वेन्सन

7

चूँकि आप jQuery का उपयोग कर रहे हैं , आप यह निर्धारित कर सकते हैं कि एक चर अपरिभाषित है या एकल फ़ंक्शन का उपयोग करके इसका मान शून्य है।

var s; // undefined
jQuery.isEmptyObject(s); // will return true;

s = null; // defined as null
jQuery.isEmptyObject(s); // will return true;

// usage
if(jQuery.isEmptyObject(s)){
    alert('Either variable: s is undefined or its value is null');
}else{
     alert('variable: s has value ' + s);
}

s = 'something'; // defined with some value
jQuery.isEmptyObject(s); // will return false;

इसने मेरे लिए काम नहीं किया। मुझे अभी भी त्रुटि मिली है: ReferenceError: s is not definedपहले उदाहरण के लिए।
मार्क

5

jQuery चेक तत्व शून्य नहीं है:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}

4

जावास्क्रिप्ट में, मेरे ज्ञान के अनुसार, हम नीचे की तरह एक अपरिभाषित, अशक्त या खाली चर की जांच कर सकते हैं।

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

सभी शर्तों की जांच करें:

if(variable === undefined || variable === null || variable === ''){
}

varएक आरक्षित शब्द है, यह फेंक देगाSyntaxError
dhilt

4

आप बस निम्नलिखित का उपयोग कर सकते हैं (मुझे पता है कि ऐसा करने के लिए छोटे तरीके हैं, लेकिन इससे नेत्रहीन निरीक्षण करना आसान हो सकता है, कम से कम दूसरों को कोड देखने के लिए)।

if (x === null || x === undefined) {
 // Add your response code here, etc.
}

3

जांचने का सबसे आसान तरीका है:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}

1
यदि चर का मान है false, जो संभावित रूप से अवांछनीय है, तो यह कोड निष्पादित करेगा ।
बक्सर

प्रश्न स्पष्ट है "कैसे निर्धारित किया जाए कि चर 'अपरिभाषित' या 'अशक्त' है?" और जावास्क्रिप्ट में यदि किसी चर में अशक्त या अपरिभाषित का मान है, तो इसका मान गलत है।
एम। अर्नोल्ड

1
क्षमा करें, लेकिन यह गलत है। यहाँ एक JSfiddle यह साबित करने के लिए है।
बक्सर

आपके जवाब से undefined, null और कुछ अन्य चीजें जैसे कि खाली स्ट्रिंग, +0, -0 NaNऔर falseके माध्यम से प्राप्त करें। !ऑपरेटर ऑपेरंड- यहाँ variable- बूलियन के लिए मजबूर करता है
Alireza

लेकिन सवाल की जाँच करें: "यह कैसे निर्धारित किया जाए कि एक चर अपरिभाषित या अशक्त है",! एक के साथ प्रयोग किया जाता है अगर चर हमेशा अशक्त या अपरिभाषित है, तो सही पर लौटेगा।
एम। अर्नोल्ड

2

नीचे दिए गए समाधान के साथ:

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);

console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...

मैं निम्नलिखित के लिए जाँच करने में सक्षम हूँ:

  • शून्य
  • अपरिभाषित
  • NaN
  • खाली
  • स्ट्रिंग ("")
  • 0
  • असत्य

यह उस सवाल का जवाब नहीं देता है, जो "मैं अशक्त और अपरिभाषित कैसे पकड़ता हूं?" नहीं "मैं जावास्क्रिप्ट में हर झूठी मूल्य कैसे पकड़ सकता हूं?"
temporary_user_name

@ एरोविस्टा, मुझे लगा कि मैंने कंसोल.लॉग (isDeepEqual (नल, अशक्त)) के साथ किया है; और कंसोल.लॉग (isDeepEqual (अपरिभाषित, अपरिभाषित)); ?
टोनी ताई गुयेन

1

यह परखने के लिए कि क्या एक चर शून्य या अपरिभाषित है, मैं नीचे दिए गए कोड का उपयोग करता हूं।

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }

बंद करें लेकिन नहीं। हारें typeofऔर undefinedसीधे बाहर की तुलना करें , न कि एक स्ट्रिंग के रूप में। यह काम करता है लेकिन अतिरिक्त ऑपरेटर का कोई प्रभाव नहीं पड़ता है, लेकिन इसे वर्डियर बनाने के लिए।
temporary_user_name

इस मामले में हाँ आप सही हैं हमें टाइपोफ़ का उपयोग करने की आवश्यकता नहीं है। जब आप अपरिभाषित चर के साथ काम कर रहे हैं तो टाइपोफ का उपयोग करना एक अच्छा अभ्यास है। टाइपोफ़ का उपयोग करने का एक कारण यह है कि यदि चर घोषित नहीं किया गया है तो यह एक त्रुटि नहीं है।
DanKodi

यह वास्तव में एक बुरी बात है। आप अपने कोड में अघोषित चर नहीं चाहते हैं। आप चाहते हैं कि एक ReferenceError फेंकें ताकि आप वेरिएबल को खोज सकें और उसे घोषित कर सकें। निश्चित रूप से आप C ++ जैसी संकलित भाषा में कोशिश नहीं करेंगे! सिर्फ इसलिए कि जेएस अनुमति देता है इसका मतलब यह नहीं है कि यह किया जाना चाहिए।
temporary_user_name

1
आपका या कथन पीछे की ओर है। यह जाँचना कि कुछ अपरिभाषित है पहला कदम होगा, दूसरा नहीं।
एंथनी रटलेज

1

मैं इस परीक्षण को क्रोम कंसोल में चलाता हूं। प्रयोग (शून्य 0) आप अपरिभाषित देख सकते हैं:

var c;
undefined
if (c === void 0) alert();
// output =  undefined
var c = 1;
// output =  undefined
if (c === void 0) alert();
// output =   undefined
// check c value  c
// output =  1
if (c === void 0) alert();
// output =  undefined
c = undefined;
// output =  undefined
if (c === void 0) alert();
// output =   undefined

1

आइए इसे देखें,

  1.  

    let apple; // Only declare the variable as apple
    alert(apple); // undefined

    उपरोक्त में, चर केवल के रूप में घोषित किया गया है apple। इस मामले में, यदि हम विधि कहते हैं तो alertयह अपरिभाषित प्रदर्शित करेगा।

  2.  

       let apple = null; /* Declare the variable as apple and initialized but the value is null */
       alert(apple); // null

दूसरे में यह शून्य प्रदर्शित करता है, क्योंकि appleमूल्य का परिवर्तन शून्य है।

तो आप जांच सकते हैं कि क्या मूल्य अपरिभाषित है या अशक्त है।

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}

0

सर्वोत्तम मार्ग:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}

6
यह सटीक समाधान पहले से ही 11 अक्टूबर, 2013 को @jkindwall द्वारा प्रदान किया गया था। stackoverflow.com/a/19323555/2943403 यह कोड-ओनली पोस्ट पूरी तरह से बेकार है क्योंकि यह पृष्ठ पर कोई नया मूल्य नहीं जोड़ता है। वास्तव में, यह पेज ब्लोट को जोड़ रहा है और शोधकर्ताओं द्वारा इसे पढ़ने का समय बर्बाद कर रहा है। कृपया इस उत्तर को हटा दें।
मिकमैकुसा

0
(null == undefined)  // true

(null === undefined) // false

क्योंकि === दोनों प्रकार और मूल्य के लिए जाँच करता है। दोनों के प्रकार अलग-अलग हैं लेकिन मूल्य समान हैं।


0
var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}

3
यदि उपयोगकर्ता 'अपरिभाषित' शब्द में प्रवेश करता है तो क्या होगा?
चक

आपका प्रश्न अच्छा है, यह दिखाता है कि स्थिति सही है, इसलिए हमें सामान्य अपरिभाषित विकल्प को टाइपोफ स्थिति में बदलने की आवश्यकता है। @ चीक
कृतिका। 13

ये गलत है। typeofकभी नहीं उपजेंगे undefined, केवल स्ट्रिंग 'undefined'। इसके अलावा, i == nullअगर iयह सच है undefined, तो दूसरा बूलियन काम करने पर भी बेमानी होगा।
temporary_user_name

1
यह समाधान (शर्तों के विपरीत) 11 अक्टूबर, 2013 को @jkindwall द्वारा पहले से ही प्रदान किया गया था। stackoverflow.com/a/19323555/2943403 यह कोड-ओनली पोस्ट पूरी तरह से बेकार है क्योंकि यह पृष्ठ पर कोई नया मूल्य नहीं जोड़ता है। वास्तव में, यह पेज ब्लोट को जोड़ रहा है और शोधकर्ताओं द्वारा इसे पढ़ने का समय बर्बाद कर रहा है। कृपया इस उत्तर को हटा दें।
मिकमैकुसा

0

foo == nullजांच चाल करते हैं और कम से कम ढंग से "अनिर्धारित या नल" मामले को हल करना चाहिए। (विचार नहीं "फू घोषित नहीं है" मामला।) लेकिन जिन लोगों को 3 बराबर (सबसे अच्छा अभ्यास के रूप में) इस्तेमाल किया जाता है वे इसे स्वीकार नहीं कर सकते हैं। बस एस्क्लाइन और tslint में eqeqeq या ट्रिपल-समान नियमों को देखें ...

स्पष्ट दृष्टिकोण, जब हम जाँच रहे हैं कि एक चर है undefinedया nullअलग से, इस मामले में लागू किया जाना चाहिए, और विषय के लिए मेरा योगदान (अब के लिए 27 गैर-नकारात्मक उत्तर!) void 0चेक प्रदर्शन करने के लिए संक्षिप्त और सुरक्षित दोनों तरह से उपयोग करना है। के लिए undefined

उपयोग करना foo === undefinedसुरक्षित नहीं है क्योंकि अपरिभाषित एक आरक्षित शब्द नहीं है और इसे ( एमडीएन ) छायांकित किया जा सकता है । typeof === 'undefined'चेक का उपयोग करना सुरक्षित है, लेकिन अगर हम फू-अ-अघोषित मामले के बारे में परवाह नहीं करने जा रहे हैं, तो निम्नलिखित दृष्टिकोण का उपयोग किया जा सकता है:

if (foo === void 0 || foo === null) { ... }

0

यदि आप इसे जांचने के लिए कोई फ़ंक्शन बनाते हैं:

export function isEmpty (v) {
 if (typeof v === "undefined") {
   return true;
 }
 if (v === null) {
   return true;
 }
 if (typeof v === "object" && Object.keys(v).length === 0) {
   return true;
 }

 if (Array.isArray(v) && v.length === 0) {
   return true;
 }

 if (typeof v === "string" && v.trim().length === 0) {
   return true;
 }

return false;
}

-1

टाइपऑफ़ नल को कॉल करना "ऑब्जेक्ट" का एक मान देता है, क्योंकि विशेष मान नल को एक खाली ऑब्जेक्ट संदर्भ माना जाता है। संस्करण 5 के माध्यम से सफारी और संस्करण 7 के माध्यम से क्रोम में एक क्विक है जहां नियमित अभिव्यक्ति पर टाइपोफ कॉलिंग "फ़ंक्शन" करता है, जबकि अन्य सभी ब्राउज़र "ऑब्जेक्ट" वापस करते हैं।


-1
var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

आप केवल एक दूसरे का उपयोग कर सकते हैं: क्योंकि यह परिभाषा और घोषणा दोनों के लिए जांच करेगा


-1

मुझे अभी भी लगता है कि इन दो स्थितियों का परीक्षण करने का सबसे अच्छा / सुरक्षित तरीका एक स्ट्रिंग में मूल्य डालना है:

var EmpName = $("div#esd-names div#name").attr('class');

// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
    // Do something with your code
}

// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
    // Do something with your code
}

क्या आप बता सकते हैं कि आप क्यों मानते हैं कि यह परीक्षण करने के लिए "सबसे अच्छा / सुरक्षित तरीका" है?
दुखद माइक्रोवेव

क्योंकि रूपांतरण हमेशा एक "मानकीकृत" स्ट्रिंग (यानी [ऑब्जेक्ट अनिर्धारित]) लौटा रहा है, इसलिए आप मिथ्या मूल्यों का परीक्षण करके परेशानी में नहीं पड़ें। सत्य / मिथ्या मूल्यों के साथ मेरे पास अनुभवों के आधार पर सिर्फ मेरी राय है।
n1kkou

स्पष्टीकरण के लिए धन्यवाद। मैं आलोचना नहीं कर रहा हूं, इसका एक दिलचस्प जवाब है, मैं सिर्फ आपको दूसरों के लिए कुछ स्पष्टीकरण प्रदान करना चाहता था क्योंकि यह अन्य तरीकों से संभावित रूप से बेहतर क्यों है।
दुखद माइक्रोवेव

कोई चिंता नहीं! इस प्रकार की तुलनाओं के साथ मेरे पास बहुत सारे मुद्दे थे, और अब तक, मैं इसे इस मामले के लिए सबसे उपयोगी दृष्टिकोण के रूप में देखता हूं।
n1kkou

-2

आप यह जांच सकते हैं कि क्या केवल टाइपो का उपयोग करके मान अपरिभाषित या शून्य है:

if(typeof value == 'undefined'){

टाइपऑफ़ के संबंध में पिछले उत्तर में टिप्पणियाँ देखें ( stackoverflow.com/a/21273362/6305294 )।
एलेक्स

4
यह गलत है। पकड़ता नहीं है null। मुझे समझ में नहीं आता कि कई साल पहले एक सही और पूर्ण उत्तर देने वाले प्रश्न पर नए, गलत उत्तर क्यों दिए जा रहे हैं। क्या आपको लगता है कि वर्तमान उत्तर किसी तरह अपर्याप्त हैं?
temporary_user_name

-4

if(x==null)जावास्क्रिप्ट में एक बुरा विचार है। न्यायाधीश के साथ "=="- यह एक अप्रत्याशित प्रकार का कारण हो सकता है, और इसे कॉफीस्क्रिप्ट द्वारा पढ़ा नहीं जा सकता है, कभी भी "=" "" या "! =" का प्रयोग दशा निर्णय में न करें!

if(x)बेहतर होगा, लेकिन 0 और "" के साथ सावधान रहें । यह माना जाएगा झूठी साथ, नहीं बराबर विधि "!= null"है सच

यहां छवि विवरण दर्ज करें

जावास्क्रिप्ट सर्वोत्तम प्रथाओं देखें ।


3
यह पूरी तरह से गलत है, और किसी भी व्यावसायिक-श्रेणी के ढांचे या सॉफ्टवेयर के सरसरी अध्ययन से यह स्पष्ट हो जाएगा कि क्षण भर में। का उपयोग ==करने के लिए तुलना करने के लिए nullहै पकड़ने के मानक तरीका और जे एस में। इस विशिष्ट संदर्भ में टाइप के साथ ज़बरदस्ती करना एक जोखिम नहीं है, और वास्तव में दोनों को एक साथ पकड़ने के लक्ष्य को पूरा करने के लिए लाभ उठाया जा रहा है । कृपया उन प्रश्नों के गलत और भ्रामक उत्तर देने के लिए चुनाव से पहले भाषा के साथ काम करने में अधिक समय व्यतीत करें, जो वर्षों पहले संतोषजनक रूप से हल किए गए थे। nullundefined==nullundefined
temporary_user_name

"==" से बचें। सब कुछ हमेशा बदलते रहते है, मैं तुम्हें @Aerovistae साथ aggree नहीं है
Albert.Qing

3
आप मुझसे असहमत नहीं हैं - आप पूरे जावास्क्रिप्ट प्रतिष्ठान से असहमत हैं। आइए स्पष्ट हो।
temporary_user_name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.