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

1872voto

Natrium Punkte 29881

In JavaScript ist null ein Objekt. Es gibt einen anderen Wert für Dinge, die nicht existieren, undefined. Das DOM gibt für fast alle Fälle, in denen es nicht gelingt, eine Struktur im Dokument zu finden, null zurück, aber in JavaScript selbst wird undefined verwendet.

Zweitens, nein, es gibt keine direkte Äquivalenz. Wenn Sie wirklich speziell auf null überprüfen möchten, tun Sie dies:

if (yourvar === null) // Wird nicht ausgeführt, wenn yourvar `undefined` ist

Wenn Sie überprüfen möchten, ob eine Variable existiert, kann dies nur mit try/catch erfolgen, da typeof eine nicht deklarierte Variable und eine mit dem Wert von undefined deklarierte Variable als gleich behandelt.

Aber, um zu überprüfen, ob eine Variable deklariert ist und nicht undefined ist:

if (yourvar !== undefined) // Jeder Bereich

Zuvor war es notwendig, den typeof-Operator sicher zu verwenden, um auf sicherem Weg nach undefined suchen, da es möglich war, undefined genauso wie eine Variable neu zuzuweisen. Der alte Weg sah so aus:

if (typeof yourvar !== 'undefined') // Jeder Bereich

Das Problem, dass undefined neu zugewiesen werden konnte, wurde in ECMAScript 5 behoben, das 2009 veröffentlicht wurde. Sie können jetzt sicher === und !== verwenden, um auf undefined zu testen, ohne typeof zu verwenden, da undefined seit einiger Zeit schreibgeschützt ist.

Wenn Sie wissen möchten, ob ein Element unabhängig davon existiert, aber sich nicht um seinen Wert kümmern:

if ('membername' in object) // Mit Vererbung
if (object.hasOwnProperty('membername')) // Ohne Vererbung

Wenn Sie wissen möchten, ob eine Variable wahr ist:

if (yourvar)

Quelle

75 Stimmen

Undefined ist kein reserviertes Wort; Sie (oder der Code einer anderen Person) können "undefined = 3" eingeben, und das wird zwei Ihrer Tests zum Scheitern bringen.

8 Stimmen

"Wenn du weißt, dass die Variable existiert, aber nicht weißt, ob ein Wert darin gespeichert ist" - huh?!

39 Stimmen

Ich denke, er bezieht sich auf eine deklarierte Variable, die nicht zugewiesen wurde. z.B .: var foo; // foo existiert, hat aber keinen Wert

403voto

Michael Wales Punkte 9860

Der einzige Weg, um wirklich zu testen, ob eine Variable undefined ist, besteht darin, folgendes zu tun. Denken Sie daran, dass undefined ein Objekt in JavaScript ist.

if (typeof someVar === 'undefined') {
  // Ihre Variable ist undefined
}

Einige der anderen Lösungen in diesem Thread lassen Sie glauben, dass eine Variable undefined ist, obwohl sie definiert wurde (zum Beispiel mit einem Wert von NULL oder 0).

20 Stimmen

Weil die Frage hier nicht UNDEFINED lautet, sollte typeof someVar !== 'undefined' sein, oder?

1 Stimmen

Wirklich, ich glaube nicht, dass undefinded ein Objekt ist, überprüfen Sie zuerst die Dokumentation developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structu‌​res

4 Stimmen

Der einzige Test, der kein ReferenceError erzeugt.

77voto

Jason S Punkte 178087

Technisch gesehen ist die richtige Lösung (meiner Meinung nach):

typeof x === "undefined"

Manchmal kann man faul werden und einfach

x == null

verwenden, aber das erlaubt es sowohl einer nicht definierten Variablen x, als auch einer Variablen x, die null enthält, wahr zurückzugeben.

1 Stimmen

Wenn Sie var x; eingeben und dann typeof x; eingeben, erhalten Sie "undefined", genauso wie wenn Sie typeof lakjdflkdsjflsj; gemacht hätten.

0 Stimmen

Also gibt es keine Möglichkeit, auf eine nicht definierte, aber deklarierte Variable zu überprüfen?

1 Stimmen

Ich glaube nicht; ich weiß nicht, warum du das tun möchtest.

19voto

Dmitri Farkov Punkte 8543

Eine noch einfachere und verkürzte Version wäre:

if (!x) {
   //Undefined
}

ODER

if (typeof x !== "undefined") {
    //Mache etwas, da x definiert ist.
}

29 Stimmen

Der erste Codeabschnitt kann inkorrekt sein, wenn x aus einem Funktionsaufruf gesetzt wird. wie x = A(); Wenn A nichts zurückgibt, wird standardmäßig "undefined" zurückgegeben. Das Ausführen von !x wäre also wahr, was logisch korrekt wäre. Wenn jedoch A() 0 zurückgibt, sollte !x falsch sein, da x=0. Allerdings ist in JS auch !0 wahr.

0 Stimmen

Der zweite Code kann verkürzt werden auf: if(!typeof(XX)){ ... }else{ ... }

2 Stimmen

@AlejandroSilva Entschuldigung für die verspätete Antwort. Das wird nicht funktionieren, da typeof einen String zurückgibt. Daher wird es für eine nicht definierte Variable 'undefined' zurückgeben, was wiederum als TRUE ausgewertet wird und somit zu einem falsch positiven Wert für eine definierte Variable führt.

16voto

Joe Punkte 2327

Ich habe oft gemacht:

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey Idiot, definiere diesen Burschen.');
    }
}

9 Stimmen

Bitte erwägen Sie, "==" in "===" zu ändern. Wenn Sie doSomething(null) aufrufen, erhalten Sie auch den Hinweis. Es sei denn, das ist das, was Sie wollen.

0 Stimmen

Ja. Du musst entscheiden, ob du äquivalent oder genau gleich haben möchtest. In beiden Fällen könnte es nützlich sein.

1 Stimmen

Einfach so überprüfen: if(typeof variableName !== 'undefined'){ alert(variableName);}

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