2010-05-18 8 views
6

Ist es möglich, in Javascript sowohl auf null als auch auf undefiniert zu prüfen?Wie überprüft man für beide null und undefined in js?

if(_var == null || _var == undefined) { 

} 
+1

Ich würde beide Ausdrücke wechseln, aber es sollte funktionieren. –

+1

Wenn '_var'' undefiniert' ist, wird der '_var == undefinierte' Ausdruck nie erreicht, weil' _var == null 'die Koerzition eingibt, [wie Pim unten bemerkt] (http://stackoverflow.com/questions/2860058/how-to-check-für-beide-null-und-undefined-in-js/2860063 # 2860063) und 'undefined == null' gibt' true' zurück. Das '_var == null' wird auch auf' undefined' testen, aber ich glaube, dass es nicht generell empfohlen wird, sich auf Typenzerzwingung zu verlassen. –

Antwort

4

ja

jedoch den Operator == verwendet, ist es nicht necesary. mit foo == null wird auch wahr sein, von foo ist undefiniert. Beachten Sie jedoch, dass undefined und null oder nicht (!) Gleich sind. Es ist, weil das == does coersion foo == null ist auch wahr für foo ist undefiniert.

+0

+1, dies ist der kürzeste Weg, um es zu erreichen, und es ist vollständig in der Spezifikation beschrieben: [The Abstract Equality Comparison Algorithm] (http://bclary.com/2004/11/07/#a-11.9.3) (keine Sorgen über Typenzwang) ... 'if (_var == null) {...}' – CMS

0

Sie können auch $defined Funktion in Mootools verwenden (und es muss ein Äquivalent in jquery sein)

7

In JavaScript (pre ECMAScript 5), undefined ist keine Konstante, sondern eine globale Variable, und daher ist es möglich, ändere seinen Wert. Deshalb wäre es sicherer sein, den typeof Operator zu benutzen, um undefined zu überprüfen:

if (typeof _var === 'undefined') { } 

Neben Ihrem Ausdruck eine Reference zurückkehren würde, wenn die Variable _var nicht deklariert ist. Sie könnten es jedoch immer noch mit dem Operator typeof wie oben gezeigt testen.

Daher können Sie es vorziehen, die folgende verwenden:

if (typeof _var === 'undefined' || _var === null) { } 
+1

Ihr erster Fall ist ein wenig riskant, da _var möglicherweise auf einen anderen falschen Wert als null gesetzt wird. –

+0

@snowlord: Wahr. Ich habe diesen Teil entfernt. –

+1

zum Glück jetzt auf ECMAScript 5, 'undefined' ist eine Eigenschaft des globalen Objekts, die nicht beschreibbar, nicht konfigurierbar (nicht löschbar) und nicht aufzählbar :) – CMS

1
if (!_var) { 
    // Code here. 
} 

Dies sollte, da beide arbeiten undefined und null sind Typ false gezwungen.

Natürlich gibt es das kleine Problem, wenn _var tatsächlich false ist, aber es funktioniert, da in den meisten Fällen Sie würden wissen, ob _var nicht true ist und kein Objekt.

+4

Beachten Sie, dass es in JavaScript neben "false", "null" und "undefined" noch drei weitere falsche Werte gibt: Eine leere Zeichenfolge "", "0" und "NaN". –

Verwandte Themen