Frage Wie kann festgestellt werden, ob die Variable 'undefiniert' oder 'null' ist?


Wie ermittle ich, ob die Variable ist? undefined oder null? Mein Code ist wie folgt:

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

Aber wenn ich das mache, stoppt der JavaScript-Interpreter die Ausführung.


1598
2018-04-15 18:12


Ursprung


Antworten:


Sie können die Qualitäten der abstrakter Gleichheitsoperator um dies zu tun:

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

weil null == undefined ist wahr, der obige Code wird beide fangen null und undefined.


2194
2018-04-15 18:14



Der Standardweg zum fangen null und undefined gleichzeitig ist das:

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

- was zu 100% dem expliziteren, aber weniger prägnanten entspricht:

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

Wenn man professionelles JS schreibt, ist es selbstverständlich, dass [type equality und das Verhalten von == vs ===] [1] ist verstanden. Deshalb benutzen wir == und nur vergleichen mit null.


Bearbeiten Sie erneut

Die Kommentare, die den Gebrauch von vorschlagen typeof sind einfach falsch. Ja, meine obige Lösung wird einen ReferenceError verursachen, wenn die Variable nicht existiert. Das ist eine gute Sache. Dieser ReferenceError ist wünschenswert: Er wird Ihnen helfen, Ihre Fehler zu finden und zu beheben, bevor Sie Ihren Code versenden, genau wie Compilerfehler in anderen Sprachen.

Sie sollten in Ihrem Code keine Verweise auf nicht deklarierte Variablen haben.


908
2018-01-22 03:01



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

176
2018-04-15 18:25



Kombiniert man die obigen Antworten, scheint es die vollständigste Antwort zu sein:

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

Dies sollte für jede Variable funktionieren, die entweder nicht deklariert oder deklariert ist und explizit auf null oder nicht definiert gesetzt ist. Der boolesche Ausdruck sollte für jede deklarierte Variable, die einen tatsächlichen Wert ungleich Null hat, als false ausgewertet werden.


161
2017-10-11 17:02



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

wird als wahr ausgewertet, wenn der Wert nicht ist:

  • Null

  • nicht definiert

  • NaN

  • leerer String ("")

  • 0

  • falsch


74
2018-05-07 07:24



jQuery attr() Funktion gibt entweder eine leere Zeichenfolge oder den tatsächlichen Wert (und nie null oder undefined). Die einzige Zeit, die es zurückkommt undefined Dies ist der Fall, wenn der Selektor kein Element zurückgegeben hat.

Vielleicht möchten Sie also eine leere Zeichenfolge testen. Da leere Zeichenfolgen, null und undefined, false-y sind, können Sie alternativ dazu Folgendes tun:

if (!EmpName) { //do something }

20
2018-04-15 18:20



Ich benutze das gerne:

if (!!variable) {
   //do something
}

Es fängt beides Null und nicht definiert


12
2017-09-16 08:35



Wenn die Variable, die Sie überprüfen möchten, eine globale Variable ist, tun Sie dies

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

Diese Art zu überprüfen wird keinen Fehler verursachen, auch wenn der yourVarName Variable existiert nicht.

Beispiel: Ich möchte wissen, ob mein Browser die History-API unterstützt

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

Wie das funktioniert:

window ist ein Objekt, das alle globalen Variablen als seine Eigenschaften enthält, und in JavaScript ist es legal zu versuchen, auf eine nicht existierende Objekteigenschaft zuzugreifen. Ob history existiert dann nicht window.history kehrt zurück undefined. undefined ist falsch, also code in einem if(undefined){} Block wird nicht ausgeführt.


9
2018-02-10 16:30



Ich bin gekommen, um meine eigene Funktion dafür zu schreiben ... Javascript ist komisch

Verwendbar auf buchstäblich alles. (Beachten Sie, dass dies auch überprüft, ob die Variable irgendwelche verwendbaren enthält Werte. Aber da diese Information normalerweise auch benötigt wird, denke ich, dass es sich lohnt, zu posten). Bitte denken Sie darüber nach, eine Notiz zu hinterlassen.

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;
    }

Typoskript-kompatibel.

bearbeiten. Diese Funktion sollte ausreichen genau das gleiche wie PHPs empty()Funktion (sehen RETURN VALUES)

Berücksichtigt undefined, null, false, 0, 0.0, "0"  {}, [] als leer.

"0.0", NaN, " ", true gelten als nicht leer.


7
2017-10-24 15:14



Da verwendest du jQueryMit einer einzigen Funktion können Sie bestimmen, ob eine Variable nicht definiert oder ihr Wert null ist.

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;

6
2017-07-08 08:00



Ich hatte gerade dieses Problem, d. H., Ob ein Objekt null ist.
Ich benutze das einfach:

if (object) { Somecode}

d.h.

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

3
2017-10-15 16:44