Jak sprawdzić wartość niezdefiniowaną w JavaScript

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *