Wie bestimme ich, ob Variable undefined
oder ist null
?
Mein Code lautet 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>
Wenn ich dies tue, stoppt der JavaScript-Interpreter die Ausführung.
Antworten:
Sie können die Eigenschaften des abstrakten Gleichheitsoperators verwenden , um dies zu tun:
Da dies
null == undefined
zutrifft, fängt der obige Code sowohlnull
als auch abundefined
.quelle
const y = undefined; y == null;
Es sollte zurückkehrentrue
y
Konstante deklariert , aber Sie haben verglichenabc
(nichty
). Als ichy
überconsole.log(y == null);
Chrome und Firefox getestet habe, habe ichtrue
das Ergebnis erhalten. Wenn Sie einen Fehler erhalten haben, haben Sie möglicherweise versucht, den Zuweisungsoperator=
anstelle des Vergleichs zu verwenden. Dies==
wäre sinnvoll, um einen Fehler zurückzugeben, da erconst
nicht neu zugewiesen werden kann.null
oderundefined
bestehen, wenn die Variable gleich ist0
? Bei der Frage geht es nicht darum, auf einen wahrheitsgemäßen Wert zu testen, sondern explizit aufnull
oder zu testenundefined
.Die Standardmethode zum Fangen
null
undundefined
gleichzeitig ist:- was zu 100% dem expliziteren, aber weniger prägnanten entspricht:
Beim Schreiben von professionellem JS wird davon ausgegangen, dass die Typgleichheit und das Verhalten von
==
vs===
verstanden werden. Deshalb verwenden wir==
und vergleichen nur mitnull
.Erneut bearbeiten
Die Kommentare, die die Verwendung von vorschlagen,
typeof
sind einfach falsch. Ja, meine obige Lösung verursacht einen ReferenceError, wenn die Variable nicht vorhanden ist. Das ist eine gute Sache. Dieser ReferenceError ist wünschenswert: Er hilft Ihnen, Ihre Fehler zu finden und zu beheben, bevor Sie Ihren Code versenden, genau wie Compilerfehler in anderen Sprachen. Verwenden Sietry
/,catch
wenn Sie mit Eingaben arbeiten, über die Sie keine Kontrolle haben.Sie sollten keine Verweise auf nicht deklarierte Variablen in Ihrem Code haben.
quelle
!==
statt geschrieben hast!=
.undefined
, wie es jede deklarierte, aber nicht initialisierte Variablevar someVar;
tun würde, dh Ihr Argument hält nicht wirklich standWenn man die obigen Antworten kombiniert, scheint die vollständigste Antwort zu sein:
Dies sollte für jede Variable funktionieren, die entweder nicht deklariert oder deklariert und explizit auf null oder undefiniert gesetzt ist. Der boolesche Ausdruck sollte für jede deklarierte Variable mit einem tatsächlichen Wert ungleich Null als false ausgewertet werden.
quelle
typeof
ein Operator ist, keine Funktion, daher werden keine Klammern benötigt, aber ich schätze die Klammern trotzdem - einfach zur besseren Übersicht.variable == null
quelle
undefined
bewertet gleichnull
./*jshint eqnull:true */
oben in Ihrem JS-Dokument oder Ihrer JS-Funktion, und JSHint warnt Sie nicht mehr vor Ihrer Verwendung von== null
.==
defekt ist. Der Zwangif(variable == null)
in dieser Antwort macht für mich vollkommen Sinn ...wird als wahr ausgewertet, wenn der Wert nicht ist:
Null
nicht definiert
NaN
leerer String ("")
0
falsch
quelle
if (EmpName)
. Wenn esundefined
schon falsch ist.var EmpName; if (EmpName)
. Wo die Variable definiert, aber kein Wert zugewiesen ist.Die jQuery-
attr()
Funktion gibt entweder eine leere Zeichenfolge oder den tatsächlichen Wert zurück (und niemalsnull
oderundefined
). Es wird nur zurückgegeben,undefined
wenn Ihr Selektor kein Element zurückgegeben hat.Vielleicht möchten Sie also gegen eine leere Zeichenfolge testen. Da leere Zeichenfolgen null und undefiniert false-y sind, können Sie alternativ Folgendes tun:
quelle
ReferenceError: EmpName is not defined
undefined
wenn das Attribut für das Element nicht vorhanden ist (nicht nur, wenn der Selektor gemäß der Antwort keine übereinstimmenden Elemente enthält). Zum Beispiel würde einimg
mit Nein fürsrc
undefined
$('img').attr('src');
Ich bin gekommen, um meine eigene Funktion dafür zu schreiben. JavaScript ist komisch.
Es ist buchstäblich für alles verwendbar. (Beachten Sie, dass hierdurch auch geprüft wird, ob die Variable verwendbare Werte enthält . Da diese Informationen jedoch normalerweise ebenfalls benötigt werden, lohnt es sich meiner Meinung nach, sie zu veröffentlichen.) Bitte hinterlassen Sie eine Notiz.
TypeScript-kompatibel.
Diese Funktion sollte genau das Gleiche tun wie die PHP-
empty()
Funktion (sieheRETURN VALUES
)Vertritt die Ansicht
undefined
,null
,false
,0
,0.0
,"0"
{}
,[]
wie leer."0.0"
,NaN
," "
,true
Sind nicht leer betrachtet.quelle
{ }
. Dies ist ein häufiges und albernes Sprachproblem, aber ich hatte es vergessen. Alle meine Suchanfragen zeigen Antworten für undefinierte Nullwerte oder lose Gleichheitsvergleiche (==), aber keine strikte Gleichheit (===) oder Äquivalente. Und dann ist hier in Ihrer Antwort mit dem Rang -1 ganz unten auf der Seite (bevor ich positiv bewertet habe) die Antwort, die mir entgangen ist.Object.keys( obj ).length < 1
oder vielleicht === 0, vorausgesetzt, es wird niemals -1 sein. Wie auch immer, auf 0 gestimmt, umwerben. : p==
an===
das würde hier dann eine vernünftige Funktion sein.Wenn die Variable, die Sie überprüfen möchten, global ist, tun Sie dies
Diese Art der Überprüfung
yourVarName
löst keinen Fehler aus, auch wenn die Variable nicht vorhanden ist.Beispiel: Ich möchte wissen, ob mein Browser die Verlaufs-API unterstützt
So funktioniert das:
window
ist ein Objekt, das alle globalen Variablen als Eigenschaften enthält. In JavaScript ist es zulässig, auf eine nicht vorhandene Objekteigenschaft zuzugreifen. Wennhistory
nicht vorhanden, wirdwindow.history
zurückgegebenundefined
.undefined
ist falsey, daher wird Code in einemif(undefined){}
Block nicht ausgeführt.quelle
null
oder istundefined
, und es funktioniert auch nicht, wenn Ihr JavaScript außerhalb eines Browsers ausgeführt wird (dh in Node.js). Es wird auch treat Globals auf0
,false
oder''
die gleichen wie diejenigen , die nicht deklariert werden oderundefined
odernull
, die in der Regel in Ordnung ist.Das kürzeste und einfachste:
Dies wird wahr ausgewertet, wenn EmpName ist:
quelle
Der wahrscheinlich kürzeste Weg, dies zu tun, ist:
Hier ist der Beweis:
Code-Snippet anzeigen
Und hier sind weitere Details zu
==
(Quelle hier )BONUS : Grund warum
===
ist klarer als==
(siehe agc Antwort )quelle
Ich hatte gerade dieses Problem, dh zu überprüfen, ob ein Objekt null ist.
Ich benutze einfach das:
Zum Beispiel:
quelle
Da Sie jQuery verwenden , können Sie mithilfe einer einzelnen Funktion feststellen, ob eine Variable undefiniert oder ihr Wert null ist.
quelle
ReferenceError: s is not defined
für das erste Beispiel.jQuery-Prüfelement nicht null:
quelle
In JavaScript können wir meines Wissens nach eine undefinierte, null oder leere Variable wie unten überprüfen.
Überprüfen Sie alle Bedingungen:
quelle
var
ist ein reserviertes Wort, das wird werfenSyntaxError
Sie können einfach Folgendes verwenden (ich weiß, dass es kürzere Möglichkeiten gibt, dies zu tun, aber dies kann die visuelle Beobachtung erleichtern, zumindest für andere, die sich den Code ansehen).
quelle
Der einfachste Weg zu überprüfen ist:
quelle
false
, was möglicherweise unerwünscht ist.undefined
,null
und ein paar andere Dinge wie leere Zeichenkette, +0, -0NaN
undfalse
durchkommen .!
Der Operator zwingt den Operanden hiervariable
- zu Boolean: ecma-international.org/ecma-262/#sec-tobooleanMit der folgenden Lösung:
Ich kann Folgendes überprüfen:
quelle
Um zu testen, ob eine Variable null oder undefiniert ist, verwende ich den folgenden Code.
quelle
typeof
und vergleiche es mitundefined
Straight Out, nicht als String. Dies funktioniert, aber der zusätzliche Operator hat keine andere Wirkung, als es wortreicher zu machen.Ich führe diesen Test in der Chrome-Konsole aus. Mit (void 0) können Sie undefiniert überprüfen:
quelle
Schauen wir uns das an,
Oben wird die Variable nur als deklariert
apple
. In diesem Fall wird beim Aufrufen der Methodealert
undefiniert angezeigt.Im zweiten wird null angezeigt, da die Wertvariable
apple
null ist.So können Sie überprüfen, ob ein Wert undefiniert oder null ist.
quelle
Bester Weg:
quelle
Weil === sowohl nach Typ als auch nach Wert sucht. Der Typ von beiden ist unterschiedlich, aber der Wert ist der gleiche.
quelle
quelle
typeof
wird niemals nachgebenundefined
, nur die Zeichenfolge'undefined'
. Darüber hinausi == null
ist dies bereits der Fall, wenn dies der Falli
istundefined
, sodass der zweite Boolesche Wert redundant wäre, selbst wenn er funktionieren würde.Die
foo == null
Prüfung sollte den Trick ausführen und den Fall "undefiniert ODER null" auf kürzeste Weise lösen. (Der Fall "foo wird nicht deklariert" wird nicht berücksichtigt.) Personen, die 3 Gleichgestellte haben (als bewährte Methode), akzeptieren dies möglicherweise nicht. Schauen Sie sich einfach eqeqeq oder Triple-Equals- Regeln in eslint und tslint an ...Der explizite Ansatz, wenn wir prüfen, ob eine Variable
undefined
odernull
separat ist, sollte in diesem Fall angewendet werden, und mein Beitrag zum Thema (27 derzeit nicht negative Antworten!) Besteht darin,void 0
sowohl eine kurze als auch eine sichere Methode zur Durchführung der Prüfung zu verwenden zumundefined
.Die Verwendung
foo === undefined
ist nicht sicher, da undefiniert kein reserviertes Wort ist und schattiert werden kann ( MDN ). Die Verwendung vontypeof === 'undefined'
check ist sicher, aber wenn wir uns nicht um den nicht deklarierten Fall kümmern, kann der folgende Ansatz verwendet werden:quelle
Wenn Sie eine Funktion erstellen, um dies zu überprüfen:
quelle
Wenn Sie typeof null aufrufen, wird der Wert "object" zurückgegeben, da der spezielle Wert null als leere Objektreferenz betrachtet wird. Safari bis Version 5 und Chrome bis Version 7 haben eine Besonderheit, bei der der Aufruf von typeof für einen regulären Ausdruck "function" zurückgibt, während alle anderen Browser "object" zurückgeben.
quelle
Sie können nur die zweite verwenden, da sowohl die Definition als auch die Deklaration überprüft werden
quelle
Ich denke immer noch, dass der beste / sicherste Weg, diese beiden Bedingungen zu testen, darin besteht, den Wert in einen String umzuwandeln:
quelle
Sie können überprüfen, ob der Wert undefiniert oder null ist, indem Sie einfach typeof verwenden:
quelle
null
. Ich verstehe nicht, warum neue, falsche Antworten auf eine Frage gegeben werden, die vor vielen Jahren richtig und vollständig beantwortet wurde. Haben Sie das Gefühl, dass die aktuellen Antworten irgendwie unzureichend sind?if(x==null)
ist eine schlechte Idee in JavaScript. Beurteilen mit"=="
- es kann zu einem unerwarteten Zwang führen, und es kann nicht von CoffeeScript gelesen werden. Verwenden Sie niemals "==" oder "! =" Bei der Zustandsbeurteilung!if(x)
wird besser sein, aber sei vorsichtig mit 0 und "" . Es wird als falsch behandelt , nicht die gleiche Methode"!= null"
ist wahr .Siehe Best Practices für JavaScript .
quelle
==
zum Vergleichennull
ist die Standardmethode zum Fangennull
undundefined
in JS. Typenzwang mit==
ist in diesem speziellen Kontext kein Risiko und wird tatsächlich ausgenutzt, um das Ziel zu erreichen, beidenull
undundefined
gleichzeitig zu fangen . Bitte verbringen Sie mehr Zeit mit der Arbeit mit der Sprache, bevor Sie falsche und irreführende Antworten auf Fragen geben, die vor Jahren zufriedenstellend gelöst wurden.