it-swarm.com.de

Überprüfen, ob eine Variable in Javascript vorhanden ist

Ich weiß, dass es zwei Methoden gibt, um festzustellen, ob eine Variable existiert und nicht null (falsch, leer) in Javascript:

1) if ( typeof variableName !== 'undefined' && variableName )

2) if ( window.variableName )

welches ist bevorzugter und warum?

64
Kir Ivlev

Eine Variable ist deklariert, wenn beim Zugriff auf den Variablennamen kein ReferenceError erzeugt wird. Der Ausdruck typeof variableName !== 'undefined' wird nur in einem von zwei Fällen false sein:

  • die Variable ist nicht deklariert (d. h. es gibt kein var variableName im Bereich), oder
  • die Variable wird deklariert und ihr Wert ist undefined (d. h. die Variable Wert ist nicht definiert)

Andernfalls ergibt der Vergleich true.

Wenn Sie wirklich testen möchten, ob eine Variable deklariert ist oder nicht, müssen Sie catch jedes ReferenceError, das durch Referenzversuche erstellt wurde, angeben:

var barIsDeclared = true; 
try{ bar; }
catch(e) {
    if(e.name == "ReferenceError") {
        barIsDeclared = false;
    }
}

Wenn Sie nur testen möchten, ob der Wert einer deklarierten Variablen weder undefined noch null ist, können Sie einfach testen:

if (variableName !== undefined && variableName !== null) { ... }

Oder gleichermaßen mit einer nicht strengen Gleichheitsprüfung gegen null:

if (variableName != null) { ... }

Sowohl Ihr zweites Beispiel als auch Ihr rechter Ausdruck im && Operation testet, ob der Wert "falsey" ist, d. h. ob er in einem booleschen Kontext zu false gezwungen wird. Zu diesen Werten gehören null, false, 0 und die leere Zeichenfolge, die Sie möglicherweise nicht alle verwerfen möchten.

105
apsillers

Es ist wichtig zu beachten, dass 'undefined' ein perfekt gültiger Wert für eine Variable ist. Wenn Sie überprüfen möchten, ob die Variable überhaupt existiert,

if (window.variableName)

dies ist eine umfassendere Prüfung, da überprüft wird, ob die Variable tatsächlich definiert wurde. Dies ist jedoch nur sinnvoll, wenn die Variable garantiert ein Objekt ist! Wie bereits erwähnt, kann dies auch false zurückgeben, wenn der Wert von variableName false, 0, '' oder null ist.

Das reicht aber für den Alltag meist nicht aus, da wir oft keinen undefinierten Wert haben wollen. Als solches sollten Sie zuerst überprüfen, ob die Variable definiert ist, und dann mit dem Operator typeof, der, wie Adam betont hat, nur dann undefiniert zurückgibt, wenn die Variable wirklich undefiniert ist, bestätigen, dass sie nicht undefiniert ist.

if ( variableName  && typeof variableName !== 'undefined' )
20
David L

Wenn Sie überprüfen möchten, ob eine Variable (z. B. v) definiert wurde und nicht null ist:

if (typeof v !== 'undefined' && v !== null) {
    // Do some operation  
}

Wenn Sie nach allen falschen Werten suchen möchten, z. B .: undefined, null, '', 0, false:

if (v) {
   // Do some operation
}
10
Fizer Khan

Ich schreibe nur eine Antwort, weil ich nicht genug Ruf habe, um die akzeptierte Antwort von apsillers zu kommentieren. Ich stimme seiner Antwort zu, aber

Wenn Sie wirklich testen möchten, ob eine Variable nicht deklariert ist, müssen Sie den ReferenceError abfangen ...

ist nicht der einzige Weg. Man kann einfach machen:

this.hasOwnProperty("bar")

um zu überprüfen, ob im aktuellen Kontext eine Variable bar deklariert ist. (Ich bin nicht sicher, aber das Aufrufen von hasOwnProperty könnte auch schneller/effektiver sein als das Auslösen einer Ausnahme.) Dies funktioniert nur für den aktuellen Kontext (nicht für den gesamten aktuellen Bereich).

7
if ( typeof variableName !== 'undefined' && variableName )
//// could throw an error if var doesnt exist at all

if ( window.variableName )
//// could be true if var == 0

////further on it depends on what is stored into that var
// if you expect an object to be stored in that var maybe
if ( !!window.variableName )
//could be the right way

best way => see what works for your case
2
Pika

Ich fand das kürzer und viel besser:

    if(varName !== (undefined || null)) { //do something }
1
Jonas Tomanga

if (variable) kann verwendet werden, wenn garantiert wird, dass eine Variable ein Objekt ist, oder wenn false, 0 usw. als "Standard" -Werte angesehen werden (daher gleichbedeutend mit undefined oder null).

typeof variable == 'undefined' kann in Fällen verwendet werden, in denen eine angegebene Null eine eindeutige Bedeutung für eine nicht initialisierte Variable oder Eigenschaft hat. Diese Prüfung wird nicht ausgelöst und der Fehler ist variabel und wird nicht deklariert.

0
Guanxi