Więcej
JavaScript sprawdza czy zmienna istnieje (jest zdefiniowana/zainicjowana)
Która metoda sprawdzania czy zmienna została zainicjalizowana jest lepsza/poprawna? (Zakładając, że zmienna może zawierać cokolwiek (string, int, obiekt, funkcję, itd.))
if (elem) { // or !elem
lub
if (typeof(elem) !== 'undefined') {
lub
if (elem != null) {
1632
3
Chcesz operator
typeof
. Konkretnie:W większości przypadków używałbyś:
W przeciwieństwie do prostego
if (elem)
, pozwala on na0
,false
,NaN
i''
, ale odrzucanull
lubundefined
, co czyni go dobrym, ogólnym testem na obecność argumentu lub właściwości obiektu.Inne kontrole również nie są niepoprawne, po prostu mają inne zastosowania:
if (elem)
: może być użyte jeślielem
jest gwarantowane jako obiekt, lub jeślifalse
,0
, etc. są uważane za "domyślne" wartości (stąd odpowiednikundefined
lubnull
).Opcja
typeof elem == 'undefined'
może być użyta w przypadkach, gdy określonynull
ma inne znaczenie niż niezainicjalizowana zmienna lub właściwość.Jest to jedyne sprawdzenie, które nie wyrzuci błędu jeśli
elem
nie jest deklarowany (tzn. nie ma deklaracjivar
, nie jest właściwościąwindow
, lub nie jest argumentem funkcji). Jest to, moim zdaniem, dość niebezpieczne, ponieważ pozwala literówkom przemknąć niezauważone. Aby tego uniknąć, zobacz poniższą metodę.Przydatne jest również ścisłe porównanie z
undefined
:Ponieważ jednak globalne
undefined
może być nadpisane inną wartością, najlepiej jest zadeklarować zmiennąundefined
w bieżącym zakresie przed jej użyciem:Lub:
Dodatkową zaletą tej metody jest to, że minifiery JS mogą zredukować zmienną
undefined
do jednego znaku, oszczędzając kilka bajtów za każdym razem.To zależy, czy zależy ci tylko na tym, że zmienna została zdefiniowana, czy chcesz, aby miała znaczącą wartość.
Sprawdzenie, czy typ jest niezdefiniowany sprawdzi, czy zmienna została już zdefiniowana.
== null
lub!== null
sprawdzi tylko czy wartość zmiennej jest dokładnienull
.== null
lub!= null
sprawdzi czy wartość jestundefined
lubnull
.if(wartość)
sprawdzi czy zmienna jestundefined
,null
,0
, lub pustym łańcuchem.