Ich denke, der effizienteste Weg, um auf "Wert ist null
oder undefined
" zu testen, ist
if ( some_variable == null ){
// some_variable is either null or undefined
}
Diese beiden Zeilen sind also äquivalent:
if ( typeof(some_variable) !== "undefined" && some_variable !== null ) {}
if ( some_variable != null ) {}
Anmerkung 1
Wie in der Frage erwähnt, erfordert die kurze Variante, dass some_variable
deklariert wurde, andernfalls wird ein ReferenceError ausgelöst. In vielen Anwendungsfällen können Sie jedoch davon ausgehen, dass dies sicher ist:
Suchen Sie nach optionalen Argumenten:
function(foo){
if( foo == null ) {...}
Suchen Sie nach Eigenschaften für ein vorhandenes Objekt
if(my_obj.foo == null) {...}
Auf der anderen Seite typeof
können nicht deklarierte globale Variablen behandelt werden (gibt einfach zurück undefined
). Diese Fälle sollten jedoch aus guten Gründen auf ein Minimum reduziert werden, wie Alsciende erklärte.
Anmerkung 2
Diese - noch kürzere - Variante ist nicht gleichwertig:
if ( !some_variable ) {
// some_variable is either null, undefined, 0, NaN, false, or an empty string
}
damit
if ( some_variable ) {
// we don't get here if some_variable is null, undefined, 0, NaN, false, or ""
}
Notiz 3
Im Allgemeinen wird empfohlen, ===
anstelle von zu verwenden ==
. Die vorgeschlagene Lösung ist eine Ausnahme von dieser Regel. Die JSHint-Syntaxprüfung bietet eqnull
aus diesem Grund sogar die Option.
Aus dem jQuery-Styleguide :
Strenge Gleichheitsprüfungen (===) sollten zugunsten von == verwendet werden. Die einzige Ausnahme ist die Überprüfung auf undefiniert und null über null.
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
if(some_variable) { ... }
wird nicht ausgeführt, wennsome_variable
istfalse
oder0
oder ...