Gdy zmienna jest zadeklarowana bez przypisania wartości, jej początkowa wartość to undefined
.
Jak sprawdzić, czy wartość undefined
w JavaScript?
Krótka odpowiedź
W nowoczesnych przeglądarkach można bezpiecznie porównać zmienną bezpośrednio do undefined
:
Niektórzy sprzeciwiają się porównywaniu z undefined
ponieważ stare przeglądarki pozwalały na ponowne przypisanie jego wartości w następujący sposób:
Po tym ponownym przypisaniu, porównanie z undefined
bezpośrednio nie wykrywa już poprawnie, czy zmiennej przypisano wartość.
Jednak to zachowanie zostało naprawione w 2009 roku za pomocą ECMAScript 5:
W nowoczesnych przeglądarkach to „ nie jest już możliwe ponowne przypisanie globalnej wartości undefined
.
A jeśli muszę obsługiwać IE8 i starsze?
Ogólnie rzecz biorąc, porównując bezpośrednio z un zdefiniowany jest nadal bezpieczny. Nie ma praktycznego powodu, dla którego aplikacja miałaby ponownie przypisywać wartość undefined
.
Thomas Eding demonstruje to za pomocą przekonującej analogii:
Jeśli nadal jesteś zaniepokojony, istnieją dwa sposoby sprawdzenia, czy wartość jest niezdefiniowana, nawet jeśli globalna undefined
została nadpisana.
Możesz użyć void operator, aby uzyskać wartość undefined
. Będzie to działać, nawet jeśli globalna wartość window.undefined
została nadpisana:
Zero w tym przykładzie nie ma żadnego specjalnego znaczenia, równie dobrze możesz użyć 1
lub function(){}
. void(anything)
zawsze zwróci wartość undefined
.
Alternatywnie możesz użyć operatora typeof, aby bezpiecznie sprawdzić, czy wartość został przydzielony. Zamiast porównywać z globalną wartością undefined
, sprawdzasz, czy typ wartości to „undefined”:
Zwróć uwagę, że jest to nieco inne niż poprzednie opcje. Nawet jeśli name
nie został zadeklarowany jako typeof
, nadal będzie to oznaczać jako niezdefiniowane. Jeśli porównasz niezadeklarowaną zmienną z undefined
lub void(0)
, zamiast tego otrzymasz ReferenceError.
Ale nie rób tego użyj void (0) bezpośrednio
Unikaj używania void(0)
lub typeof x === "undefined"
dosłownie w kodzie. Te wyrażenia nie są oczywiste i powinny być zawarte w funkcji isUndefined w następujący sposób:
Wiele bibliotek narzędziowych ma już wbudowaną tę funkcję, na przykład „istnieje _.isUndefined
w Underscore.js.