Natknąłem się na następujący kod:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Jestem trochę nowy w JavaScript, ale z innych pytań, które tu czytałem, mam wrażenie, że ten kod nie ma większego sensu.
Otrzymasz błąd, jeśli uzyskasz dostęp do niezdefiniowanej zmiennej w dowolnym kontekście innym niżtypeof
.
Aktualizacja: (cytat) powyższej odpowiedzi może wprowadzać w błąd. Powinien mówić „niezadeklarowana zmienna” zamiast „niezdefiniowana zmienna” .
Jak się dowiedziałem, w odpowiedziach Ryana ♦ , maerics i nwellnhof , nawet jeśli nie podano argumentów funkcji, jej zmienne dla argumentów są zawsze deklarowane. Fakt ten również okazuje się błędny w przypadku pierwszej pozycji na poniższej liście.
Z mojego zrozumienia mogą wystąpić następujące scenariusze:
Funkcja została wywołana bez argumentów, co spowodowałodata
utworzenie niezdefiniowanej zmiennej i spowodowanie błędu nadata != null
.Funkcja została wywołana specjalnie z
null
(lubundefined
) jako argumentem, w którym to przypadkudata != null
już chroni kod wewnętrzny, renderując&& data !== undefined
bezużytecznym.Funkcja została wywołana z argumentem różnym od null, w którym to przypadku w trywialny sposób przekaże oba
data != null
idata !== undefined
.
P: Czy moje rozumienie jest prawidłowe?
Próbowałem następujących rzeczy w konsoli Firefoksa:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
Nie mogę wymyślić przypadku, w którym data !== undefined
po data != null
może się przydać.
if(data)
oznaczałoby, że nie może przekazać false
ani 0
jako wartości dla data
.
if(typeof someUndefVar == whatever) -- works
i if(someUnderVar) -- error
.
data !== null && data !== undefined
, co jest równoważne temu, data != null
co jest równoważne z data != undefined
. Dawna forma wydaje się być preferowane, ponieważ jest bardziej wyraźne o warunkach, podczas gdy byłoby łatwo przeoczyć, że zarówno null
i undefined
są sprawdzane z późniejszych dwóch warunków.
undefined
to IMO zapach kodu. To nie jest chronione słowo kluczowe, jak null
zmienna, która jest niezdefiniowana. To jest całkowicie poprawne i spowoduje złamanie twojego kodu:undefined = 1
if (data)
. Jest to mnemoniczny sposób w Javascript na sprawdzenie, czydata
zmienna ma wartość true.undefined
,null
False, 0, pusty łańcuch, pusta tablica i (?) Przedmiot bez właściwości FALSE, reszta jest prawdą.