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?
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?
Entschuldigung für die Nekromantie, aber die meisten Antworten hier verwechseln 'undefined' und 'not defined'
Undefined - eine Variable wurde deklariert, aber ihr Wert ist undefined.
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.
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.
Undefined ist seit ES5 (Veröffentlichung 2009) schreibgeschützt und Sie benötigen den typeof
-Operator nicht mehr.
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
}
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.
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 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.
3 Stimmen
http://stackoverflow.com/questions/519145/how-to-check-whether-a-javascript-variable-defined/519157#519157
5 Stimmen
Sieht aus wie ein Urgroßvater: stackoverflow.com/questions/1485840/… stackoverflow.com/questions/2647867/… - vielleicht ist das der Uropa: stackoverflow.com/questions/27509/…
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?.
0 Stimmen
Dein Fehler liegt daran, dass die Variable nicht deklariert wurde. Die meisten Antworten konzentrieren sich auf Zuweisungen. Siehe meine Antwort für mehr. Darüber hinaus behaupten viele von ihnen fälschlicherweise, dass null und undefined Objekte in JavaScript sind. Sie sind Primitivtypen, keine Objekte...