1063 Stimmen

Wie man in JavaScript eine nicht definierte Variable überprüft

Ich wollte überprüfen, ob die Variable definiert ist oder nicht. Zum Beispiel wirft das Folgende einen Fehler, dass es nicht definiert ist

alert( x );

Wie kann ich diesen Fehler abfangen?

5 Stimmen

1 Stimmen

Dies ist keine Kopie der markierten Kopie. Die Auflösung von Variablen und die Auflösung von Objekteigenschaften sind sehr unterschiedliche Dinge. Eine bessere Kopie ist wie man überprüft, ob eine Variable in Javascript existiert?.

15voto

Alex from Jitbit Punkte 44084

Entschuldigung für die Nekromantie, aber die meisten Antworten hier verwechseln 'undefined' und 'not defined'

  1. Undefined - eine Variable wurde deklariert, aber ihr Wert ist undefined.

  2. Nicht definiert - eine Variable wurde nicht einmal deklariert.

Der einzige sichere Weg, um beide Fälle zu überprüfen, ist die Verwendung von typeof myVar === 'undefined'

myVar === undefined überprüft nur Fall Nummer (1). Es wird immer noch "myVar ist nicht definiert" für Fall Nummer (2) werfen, wenn myVar nicht einmal deklariert ist. Der OP fragt explizit nach dem Fall "nicht einmal definiert" (2).

P.S. Ich verstehe, dass "Fall 2" in der modernen ES6-Welt seltener wird, aber einige alte Legacy-Komponenten leben noch in der Vergangenheit.

1 Stimmen

Ich bevorzuge diese Antwort gegenüber der akzeptierten.

0 Stimmen

Vielen Dank! Ich benötige diesen Fall 2 genau, um mein Skript sowohl unter Windows WSCript.exe als auch in unserer eigenen Anwendungs-eigenen eingebetteten WSH zum Laufen zu bringen. Ich musste genau wissen, ob das globale Objekt WScript existiert oder niemals deklariert wurde.

5voto

JBallin Punkte 6327

Der Fehler sagt dir, dass x nicht einmal existiert! Es wurde nicht deklariert, was sich vom Wertzuweisung unterscheidet.

var x; // Deklaration
x = 2; // Zuweisung

Wenn du x deklariert hast, würdest du keinen Fehler erhalten. Du würdest eine Benachrichtigung erhalten, die besagt undefined, weil x existiert/deklariert wurde, aber kein Wert zugewiesen wurde.

Um zu überprüfen, ob die Variable deklariert wurde, kannst du typeof verwenden. Jede andere Methode, um zu überprüfen, ob eine Variable existiert, wird denselben Fehler auslösen, den du zuerst erhalten hast.

if(typeof x !== "undefined") {
    alert(x);
}

Dies überprüft den Typ des Werts, der in x gespeichert ist. Es gibt nur undefined zurück, wenn x nicht deklariert wurde ODER wenn es deklariert wurde und noch kein Wert zugewiesen wurde.

0 Stimmen

Undefined ist seit ES5 (Veröffentlichung 2009) schreibgeschützt und Sie benötigen den typeof-Operator nicht mehr.

0 Stimmen

Undefined ist nicht definiert, danke für diese Antwort. Wenn du if(variable) benutzt und es nicht definiert ist, erhältst du immer noch einen Fehler, nicht mit typeof.

5voto

svarog Punkte 8989

Der void Operator gibt undefined für jedes übergebene Argument/Expression zurück. Sie können also gegen das Ergebnis testen (tatsächlich ändern einige Minifier Ihren Code von undefined auf void 0, um ein paar Zeichen zu sparen)

Zum Beispiel:

void 0
// undefined

if (variable === void 0) {
    // variable ist undefined
}

0 Stimmen

Ding ding! Dies ist die richtige Antwort. Schade, dass sie ganz unten ist. Alle hängen immer noch so sehr daran, typeof zu verwenden und zu denken, dass undefined neu zugewiesen werden kann, was seit etwa einem Jahrzehnt nicht mehr möglich ist.

0 Stimmen

Das war auch vor ES5 sicher, weil auch damals selbst wenn Sie undefined neu zugewiesen hätten, aus irgendeinem Grund, void 0 immer undefined zurückgegeben hätte.

4voto

Alireza Punkte 92209

Machen Sie einfach etwas wie unten:

function isNotDefined(value) {
  return typeof value === "undefined";
}

und rufen Sie es auf:

isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false

3voto

Die akzeptierte Antwort ist korrekt. Ich wollte nur eine weitere Möglichkeit hinzufügen. Du kannst auch einen try ... catch Block verwenden, um diese Situation zu behandeln. Ein verrücktes Beispiel:

var a;
try {
    a = b + 1;  // wirft ReferenceError, wenn b nicht definiert ist
} 
catch (e) {
    a = 1;      // wende ein Standardverhalten im Fehlerfall an
}
finally {
    a = a || 0; // normalisiere das Ergebnis in jedem Fall
}

Beachte den catch Block, der ein wenig unübersichtlich ist, da er einen Block-Level-Bereich erzeugt. Und natürlich ist das Beispiel extrem vereinfacht, um die gestellte Frage zu beantworten, es deckt nicht die besten Praktiken im Umgang mit Fehlern ab ;).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X