Myślę, że najskuteczniejszym sposobem sprawdzenia „wartości jest null
lub undefined
” jest
if ( some_variable == null ){
// some_variable is either null or undefined
}
Te dwie linie są równoważne:
if ( typeof(some_variable) !== "undefined" && some_variable !== null ) {}
if ( some_variable != null ) {}
Notatka 1
Jak wspomniano w pytaniu, krótki wariant wymaga some_variable
zadeklarowania, w przeciwnym razie zostanie zgłoszony błąd ReferenceError. Jednak w wielu przypadkach użycia można założyć, że jest to bezpieczne:
sprawdź opcjonalne argumenty:
function(foo){
if( foo == null ) {...}
sprawdź właściwości istniejącego obiektu
if(my_obj.foo == null) {...}
Z drugiej strony typeof
może radzić sobie z niezadeklarowanymi zmiennymi globalnymi (po prostu zwraca undefined
). Jednak przypadki te powinny zostać ograniczone do minimum z dobrych powodów, jak wyjaśnił Alsciende.
Uwaga 2
Ten - nawet krótszy - wariant nie jest równoważny:
if ( !some_variable ) {
// some_variable is either null, undefined, 0, NaN, false, or an empty string
}
więc
if ( some_variable ) {
// we don't get here if some_variable is null, undefined, 0, NaN, false, or ""
}
Uwaga 3
Ogólnie zaleca się stosowanie ===
zamiast ==
. Proponowane rozwiązanie stanowi wyjątek od tej reguły. Składnia sprawdzania JSHint nawet stanowi eqnull
opcję dla tego powodu.
Z przewodnika po stylu jQuery :
Należy stosować ścisłe kontrole równości (===) na korzyść ==. Jedynym wyjątkiem jest sprawdzanie niezdefiniowanego i zerowego za pomocą null.
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
if(some_variable) { ... }
nie zostanie wykonane, jeślisome_variable
jestfalse
lub0
...