Wie kann ich feststellen, ob eine Variable "undefiniert" oder "null" ist?

2130

Wie bestimme ich, ob Variable undefinedoder 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.

sadmicrowave
quelle

Antworten:

2849

Sie können die Eigenschaften des abstrakten Gleichheitsoperators verwenden , um dies zu tun:

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

Da dies null == undefinedzutrifft, fängt der obige Code sowohl nullals auch ab undefined.

Sarfraz
quelle
5
Ich versuche zu testen, ob das Ereignis in Firefox null ist und ein Fehler die Ausführung blockiert: "Ereignis ist undefiniert"
Entretoize
3
@ MichaelFever Wie funktioniert das nicht? Kopieren Fügen Sie dies in Ihre Konsole ein: const y = undefined; y == null;Es sollte zurückkehrentrue
Seraf
2
@ChrisStryczynski In einem Beispiel aus Ihrem Kommentar haben Sie eine yKonstante deklariert , aber Sie haben verglichen abc(nicht y). Als ich yüber console.log(y == null);Chrome und Firefox getestet habe, habe ich truedas 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 er constnicht neu zugewiesen werden kann.
Pshemo
2
Live-Beispiel für relevante Vergleiche. lgtm.
Ryan Haining
2
@ZaytsevDmitry warum sollten Sie einen Test erwarten, wenn eine Variable ist nulloder undefinedbestehen, wenn die Variable gleich ist 0? Bei der Frage geht es nicht darum, auf einen wahrheitsgemäßen Wert zu testen, sondern explizit auf nulloder zu testen undefined.
Rodrigo-Silveira
1108

Die Standardmethode zum Fangen nullund undefinedgleichzeitig ist:

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

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

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

Beim Schreiben von professionellem JS wird davon ausgegangen, dass die Typgleichheit und das Verhalten von ==vs=== verstanden werden. Deshalb verwenden wir ==und vergleichen nur mit null.


Erneut bearbeiten

Die Kommentare, die die Verwendung von vorschlagen, typeofsind 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 Sie try/, catchwenn Sie mit Eingaben arbeiten, über die Sie keine Kontrolle haben.

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

temporärer_Benutzername
quelle
47
Dies führt zu einem ReferenceError und einer Unterbrechungsausführung, wenn die Variable im Code nicht definiert ist oder auf die überhaupt nicht verwiesen wird. Die Verwendung von typeof ist sicherer.
Mani Gandham
56
Das ist eher ein stilistischer Punkt. Wenn die Variable nicht deklariert alle , das ist wirklich nur schlechte Schrift auf dem seitens des Autors. Sie sollten wissen, ob Ihre Variable deklariert wurde oder nicht, das sollte keine Frage sein. Aber ja , wenn dies aus irgendeinem Grund der Fall ist, sollte dies in window.variable anstatt nur in variable geändert werden , was keinen Referenzfehler verursacht. Art sollte vermieden werden.
temporärer_Benutzername
6
Ja, weil du !==statt geschrieben hast !=.
temporärer_Benutzername
9
-OP: Die Aussage, dass diese Vergleiche "100% äquivalent" sind, ist EINFACH FALSCH, wie Sie in Ihrer eigenen EDIT festgestellt haben. Die zweite führt zu einem ReferenceError. Zur Behauptung: "Sie sollten keine Verweise auf nicht deklarierte Variablen in Ihrem Code haben." JA WIRKLICH? Schon mal was von optionalen Parametern gehört? jsfiddle.net/3xnbxfsu
Timothy Kanski
16
@TimothyKanski optionale Parameter können undefiniert sein, wenn sie optional nicht angegeben werden, aber sie sind definitiv deklarierte Variablen. Sie sind deklariert und haben den Wert von undefined, wie es jede deklarierte, aber nicht initialisierte Variable var someVar;tun würde, dh Ihr Argument hält nicht wirklich stand
chiliNUT
228

Wenn man die obigen Antworten kombiniert, scheint 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 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.

Jkindwall
quelle
2
@Aerovistae Ich erkenne, dass dies typeofein Operator ist, keine Funktion, daher werden keine Klammern benötigt, aber ich schätze die Klammern trotzdem - einfach zur besseren Übersicht.
user664833
1
Was ist mit der direkten Überprüfung, ob (Variable === undefiniert), anstatt typeof zu verwenden?
Frozen Crayon
2
@ArjunU, das einen ReferenceError verursacht, wenn die Variable nicht deklariert ist. Wenn Sie nicht wissen, ob eine Variable deklariert ist oder nicht, verwenden Sie die obige Lösung. Wenn Sie garantieren können, dass die Variable mindestens deklariert ist, können Sievariable == null
Rogue
3
Dies ist eine bessere Lösung, da die Variable möglicherweise nicht deklariert wurde, wie @Rogue hervorhob.
Abdul Sadik Yalcin
Korrigieren Sie mich, wenn ich falsch liege, aber ist die erste Bedingung nicht eine Obermenge der zweiten, und daher ist die zweite Bedingung überflüssig?
März Ho
187
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}
knocte
quelle
14
Nur für den Fall, dass jemand denkt, dass dies eine weitere halbe Antwort ist, funktioniert dies tatsächlich. undefinedbewertet gleich null.
Chuck
3
Fehler bei mir in der Chrome-Konsole ... ReferenceError: Variable ist nicht definiert, so könnte es funktionieren, aber nicht für mich ...
Eran Medan
48
Es funktioniert nur für deklarierte Variablen, nicht für Variablen, die deklariert werden können oder nicht, was selten der Fall ist. (Sie müssen typeof + eine
11
Sie haben gerade herausgefunden, dass Sie diesen Kommentar hinzufügen können: /*jshint eqnull:true */oben in Ihrem JS-Dokument oder Ihrer JS-Funktion, und JSHint warnt Sie nicht mehr vor Ihrer Verwendung von == null.
Web_Designer
3
@Aerovistae können Sie mich auf eine Referenz verweisen, die ausdrücklich angibt, dass sie ==defekt ist. Der Zwang if(variable == null)in dieser Antwort macht für mich vollkommen Sinn ...
Ben Aston
94
if (typeof EmpName != 'undefined' && EmpName) {

wird als wahr ausgewertet, wenn der Wert nicht ist:

  • Null

  • nicht definiert

  • NaN

  • leerer String ("")

  • 0

  • falsch

Thamaraiselvam
quelle
13
Ich denke, dies ist eine gefährliche Technik, die sich wie ein Lauffeuer verbreitet hat. Weil viele der überprüften Variablen Boolesche Werte oder Zahlen sein können. Wenn der Benutzer die Konsequenzen nicht vollständig versteht, ist dies nicht gut.
nützlichBee
Bitte geben Sie einen Hinweis auf diese Javascript-Spezifikation
villamejia
1
Dies ist das gleiche wie if (EmpName). Wenn es undefinedschon falsch ist.
Rudy
1
Wenn keine Variable definiert ist. dann wenn (EmpName) Fehler werfen wird
Thamaraiselvam
1
@Thamaraiselvam Ich denke, Rudy hätte das gemeint var EmpName; if (EmpName). Wo die Variable definiert, aber kein Wert zugewiesen ist.
Hungerstar
28

Die jQuery- attr()Funktion gibt entweder eine leere Zeichenfolge oder den tatsächlichen Wert zurück (und niemals nulloder undefined). Es wird nur zurückgegeben, undefinedwenn 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:

if (!EmpName) { //do something }
Chetan Sastry
quelle
1
Chrome 17.0.963.78 m gibt diesen Fehler:ReferenceError: EmpName is not defined
Eran Medan
6
@EranMedan Ich weiß, dass dies spät ist, aber es wird hoffentlich Menschen helfen, die später hierher kommen. Der Grund, warum Sie einen Fehler erhalten, ist, dass er überhaupt nicht deklariert wurde. Normalerweise muss EmpName (oder eine andere Variable) an eine Funktion oder den Rückgabewert einer anderen Funktion übergeben und daher deklariert werden (Beispiel: "var x;"). Um zu testen, ob undefinierte, null oder leere Zeichenfolgen zurückgegeben wurden, können Sie die obige Lösung verwenden.
Dave
Mir ist klar, dass dies eine kalte Frage ist, aber jQuery wird zurückgegeben, undefinedwenn 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 ein imgmit Nein fürsrcundefined$('img').attr('src');
Codinghands
20

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.

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

TypeScript-kompatibel.


Diese Funktion sollte genau das Gleiche tun wie die PHP- empty()Funktion (siehe RETURN VALUES)

Vertritt die Ansicht undefined, null, false, 0, 0.0, "0" {}, []wie leer.

"0.0", NaN, " ", trueSind nicht leer betrachtet.

phil294
quelle
2
Ich bin auf ein kleines Problem mit der Nullprüfung gestoßen. Ich möchte überprüfen, ob ein übergebener Parameter null oder ein leeres Objekt ist { }. 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 < 1oder vielleicht === 0, vorausgesetzt, es wird niemals -1 sein. Wie auch immer, auf 0 gestimmt, umwerben. : p
Vielen Dank, ich konnte diese Funktion einfügen und viel Code bereinigen. Warum dies keine Standard-JS-Funktion ist, ist mir ein Rätsel.
Andy
3
Sie sollten ändern alle Ihre ==an ===das würde hier dann eine vernünftige Funktion sein.
Ben McIntyre
13

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

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

Diese Art der Überprüfung yourVarNamelöst keinen Fehler aus, auch wenn die Variable nicht vorhanden ist.

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

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

So funktioniert das:

windowist ein Objekt, das alle globalen Variablen als Eigenschaften enthält. In JavaScript ist es zulässig, auf eine nicht vorhandene Objekteigenschaft zuzugreifen. Wenn historynicht vorhanden, wird window.historyzurückgegeben undefined. undefinedist falsey, daher wird Code in einem if(undefined){}Block nicht ausgeführt.

DenisS
quelle
2
Leser sollten beachten, dass ein solcher Ansatz idiomatisch ist, um anhand von JavaScript, das in einem Browser ausgeführt wird, zu überprüfen, ob eine globale Variable deklariert wurde und insbesondere, ob eine vom Browser bereitgestellte globale Variable (wie die Verlaufs-API) verfügbar ist. Es funktioniert nicht, um zu überprüfen, ob eine nicht globale Variable nulloder ist undefined, und es funktioniert auch nicht, wenn Ihr JavaScript außerhalb eines Browsers ausgeführt wird (dh in Node.js). Es wird auch treat Globals auf 0, falseoder ''die gleichen wie diejenigen , die nicht deklariert werden oder undefinedoder null, die in der Regel in Ordnung ist.
Mark Amery
Dies setzt voraus, dass das Skript in einem Browser ausgeführt wird. Das ist nicht selbstverständlich.
GreenAsJade
13

Das kürzeste und einfachste:

if(!EmpName ){
 // DO SOMETHING
}

Dies wird wahr ausgewertet, wenn EmpName ist:

  • Null
  • nicht definiert
  • NaN
  • leeren
  • Zeichenfolge ("")
  • 0
  • falsch
userPlus
quelle
3
Anwendungsfall hier ist, dass ich den Unterschied zwischen undefiniert und falsch wissen möchte. Ich werde dann die Prüfung auf null verwenden.
Gast128
12

Der wahrscheinlich kürzeste Weg, dies zu tun, ist:

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

Hier ist der Beweis:

Und hier sind weitere Details zu ==(Quelle hier )

Geben Sie hier die Bildbeschreibung ein

BONUS : Grund warum ===ist klarer als ==(siehe agc Antwort )

Geben Sie hier die Bildbeschreibung ein

Kamil Kiełczewski
quelle
9

Ich hatte gerade dieses Problem, dh zu überprüfen, ob ein Objekt null ist.
Ich benutze einfach das:

if (object) {
    // Your code
}

Zum Beispiel:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}
Welshboy
quelle
3
Es wäre besser, var A = document.getElementById ("enterJob") zu setzen, wenn (A) A.className + = 'current'; Auf diese Weise arbeitest du zu 50% für das gleiche Ergebnis ... Aber vielleicht hast du es nur für Shows gemacht und dann grüße ich.
Harry Svensson
8

Da Sie jQuery verwenden , können Sie mithilfe einer einzelnen Funktion feststellen, ob eine Variable undefiniert 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;
Angelin Nadar
quelle
Das hat bei mir nicht funktioniert. Ich habe immer noch den Fehler: ReferenceError: s is not definedfür das erste Beispiel.
Mark
6

jQuery-Prüfelement nicht null:

var dvElement = $('#dvElement');

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

In JavaScript können wir meines Wissens nach eine undefinierte, null oder leere Variable wie unten überprüfen.

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

Überprüfen Sie alle Bedingungen:

if(variable === undefined || variable === null || variable === ''){
}
DevAelius
quelle
varist ein reserviertes Wort, das wird werfenSyntaxError
dhilt
5

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).

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

Der einfachste Weg zu überprüfen ist:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}
M. Arnold
quelle
1
Dadurch wird der Code ausgeführt, wenn die Variable einen Wert von hat false, was möglicherweise unerwünscht ist.
Byxor
Die Frage ist klar: "Wie kann festgestellt werden, ob die Variable 'undefiniert' oder 'null' ist?" und in Javascript ist ihr Wert falsch, wenn eine Variable den Wert null oder undefiniert hat.
M. Arnold
1
Entschuldigung, aber das ist falsch. Hier ist eine JSfiddle , um es zu beweisen.
Byxor
Durch Ihre Antwort, undefined, null und ein paar andere Dinge wie leere Zeichenkette, +0, -0 NaNund falsedurchkommen . !Der Operator zwingt den Operanden hier variable- zu Boolean: ecma-international.org/ecma-262/#sec-toboolean
Alireza
Aber überprüfen Sie die Frage: "Wie man feststellt, ob eine Variable undefiniert oder null ist", die! Der mit einem if verwendete Operand kehrt immer zu true zurück, wenn die Variable null oder undefiniert ist.
M. Arnold
3

Mit der folgenden Lösung:

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...

Ich kann Folgendes überprüfen:

  • Null
  • nicht definiert
  • NaN
  • leeren
  • Zeichenfolge ("")
  • 0
  • falsch
Tony Tai Nguyen
quelle
Dies beantwortet nicht die Frage: "Wie fange ich null und undefiniert?" nicht "Wie fange ich jeden Falsey-Wert in JavaScript ab?"
temporärer_Benutzername
@Aerovistae, ich dachte, ich hätte mit console.log (isDeepEqual (null, null)); und console.log (isDeepEqual (undefiniert, undefiniert)); ?
Tony Tai Nguyen
2

Um zu testen, ob eine Variable null oder undefiniert ist, verwende ich den folgenden Code.

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }
DanKodi
quelle
Nah aber nein. Verliere das typeofund vergleiche es mit undefinedStraight Out, nicht als String. Dies funktioniert, aber der zusätzliche Operator hat keine andere Wirkung, als es wortreicher zu machen.
temporärer_Benutzername
In diesem Fall haben Sie Recht, wir müssen typeof nicht verwenden. Es wird jedoch empfohlen, typeof zu verwenden, wenn Sie mit undefinierten Variablen arbeiten. Ein Grund für die Verwendung von typeof ist, dass kein Fehler ausgegeben wird, wenn die Variable nicht deklariert wurde.
DanKodi
Das ist eigentlich eine schlechte Sache. Sie möchten keine nicht deklarierten Variablen in Ihrem Code. Sie möchten, dass ein ReferenceError ausgelöst wird, damit Sie die Variable finden und deklarieren können. Sicherlich würden Sie das nicht in einer kompilierten Sprache wie C ++ versuchen! Nur weil JS es erlaubt, heißt das nicht, dass es getan werden sollte.
temporärer_Benutzername
1
Ihre oder Aussage ist rückwärts. Zu überprüfen, ob etwas undefiniert ist, wäre der erste Schritt, nicht der zweite.
Anthony Rutledge
2

Ich führe diesen Test in der Chrome-Konsole aus. Mit (void 0) können Sie undefiniert überprüfen:

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
suhail
quelle
2

Schauen wir uns das an,

  1.  

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

    Oben wird die Variable nur als deklariert apple. In diesem Fall wird beim Aufrufen der Methode alertundefiniert angezeigt.

  2.  

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

Im zweiten wird null angezeigt, da die Wertvariable applenull ist.

So können Sie überprüfen, ob ein Wert undefiniert oder null ist.

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

Bester Weg:

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

/* do your stuff */
}
Nishanth Matha
quelle
6
Diese genaue Lösung wurde bereits am 11. Oktober 2013 von @jkindwall bereitgestellt. Stackoverflow.com/a/19323555/2943403 Dieser Nur- Code-Beitrag ist völlig nutzlos, da er der Seite keinen neuen Wert hinzufügt. Tatsächlich fügt es das Aufblähen von Seiten hinzu und verschwendet den Forschern Zeit beim Lesen. Bitte entfernen Sie diese Antwort.
Mickmackusa
1
(null == undefined)  // true

(null === undefined) // false

Weil === sowohl nach Typ als auch nach Wert sucht. Der Typ von beiden ist unterschiedlich, aber der Wert ist der gleiche.

Franklin Fromm
quelle
1
var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}
KARTHIKEYAN.A
quelle
3
Was passiert, wenn der Benutzer das Wort "undefiniert" eingibt?
Chuck
Ihre Frage ist gut, es zeigt, dass die Bedingung wahr ist, so dass wir die Option normal undefiniert in Typ der Bedingung ändern müssen. @Chuck
KARTHIKEYAN.A
Das ist falsch. typeofwird niemals nachgeben undefined, nur die Zeichenfolge 'undefined'. Darüber hinaus i == nullist dies bereits der Fall, wenn dies der Fall iist undefined, sodass der zweite Boolesche Wert redundant wäre, selbst wenn er funktionieren würde.
temporärer_Benutzername
1
Diese Lösung (mit umgekehrten Bedingungen) wurde bereits am 11. Oktober 2013 von @jkindwall bereitgestellt. Stackoverflow.com/a/19323555/2943403 Dieser Nur-Code-Beitrag ist völlig nutzlos, da er der Seite keinen neuen Wert hinzufügt. Tatsächlich fügt es das Aufblähen von Seiten hinzu und verschwendet den Forschern Zeit beim Lesen. Bitte entfernen Sie diese Antwort.
Mickmackusa
1

Die foo == nullPrü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 undefinedoder nullseparat ist, sollte in diesem Fall angewendet werden, und mein Beitrag zum Thema (27 derzeit nicht negative Antworten!) Besteht darin, void 0sowohl eine kurze als auch eine sichere Methode zur Durchführung der Prüfung zu verwenden zumundefined .

Die Verwendung foo === undefinedist nicht sicher, da undefiniert kein reserviertes Wort ist und schattiert werden kann ( MDN ). Die Verwendung von typeof === 'undefined'check ist sicher, aber wenn wir uns nicht um den nicht deklarierten Fall kümmern, kann der folgende Ansatz verwendet werden:

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

Wenn Sie eine Funktion erstellen, um dies zu überprüfen:

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;
}
Ernesto
quelle
-1

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.

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

Sie können nur die zweite verwenden, da sowohl die Definition als auch die Deklaration überprüft werden

keshav
quelle
-1

Ich denke immer noch, dass der beste / sicherste Weg, diese beiden Bedingungen zu testen, darin besteht, den Wert in einen String umzuwandeln:

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
quelle
Können Sie erklären, warum Sie glauben, dass dies der "beste / sicherste Weg" ist, um die Tests durchzuführen?
Sadmicrowave
Da bei der Konvertierung immer eine "standardisierte" Zeichenfolge (dh [Objekt undefiniert]) zurückgegeben wird, treten beim Testen von Falschwerten keine Probleme auf. Das ist nur meine Meinung, basierend auf Erfahrungen, die ich mit wahrheitsgemäßen / falschen Werten gemacht habe.
n1kkou
Danke für die Erklärung. Ich kritisiere nicht, es ist eine interessante Antwort. Ich wollte nur, dass Sie anderen erklären, warum dies möglicherweise anderen Methoden überlegen ist.
Sadmicrowave
Keine Sorge! Ich hatte viele Probleme mit dieser Art von Vergleichen, und bis jetzt finde ich es als den nützlichsten Ansatz für diese Angelegenheit.
n1kkou
-2

Sie können überprüfen, ob der Wert undefiniert oder null ist, indem Sie einfach typeof verwenden:

if(typeof value == 'undefined'){
Gideon
quelle
Siehe Kommentare in der vorherigen Antwort ( stackoverflow.com/a/21273362/6305294 ) bezüglich typeof.
Alex
4
Das ist falsch. Fängt nicht 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?
temporärer_Benutzername
-4

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 .

Geben Sie hier die Bildbeschreibung ein

Siehe Best Practices für JavaScript .

Albert.Qing
quelle
3
Dies ist völlig falsch, und das flüchtige Studium eines professionellen Frameworks oder einer professionellen Software wird dies innerhalb weniger Augenblicke belegen. Die Verwendung ==zum Vergleichen nullist die Standardmethode zum Fangen nullund undefinedin JS. Typenzwang mit ==ist in diesem speziellen Kontext kein Risiko und wird tatsächlich ausgenutzt, um das Ziel zu erreichen, beide nullund undefinedgleichzeitig 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.
temporärer_Benutzername
Vermeiden Sie "==". Alles ändert sich ständig, ich stimme dir nicht zu @Aerovistae
Albert.Qing
3
Sie sind nicht anderer Meinung als ich - Sie sind nicht einverstanden mit dem gesamten JavaScript-Establishment. Damit wir uns verstehen.
temporärer_Benutzername