Problem with Testing for NaN in JavaScript

pierwotnie opublikowany w a Drip of JavaScript newsletter.

w JavaScript wartość specjalna NaN (co oznacza „nie liczba”) jest używana do reprezentowania wyniku obliczeń matematycznych, które nie mogą być reprezentowane jako liczba znacząca., Na przykład:

prawdopodobnie napotkasz NaN podczas używania parseInt lub parseFloat, aby wyodrębnić liczbę z łańcucha, jak w tym przykładzie:

w rezultacie Programiści JavaScript często muszą przetestować zmienną wyniku, aby sprawdzić, czy zawiera ona NaN lub czy jest to znacząca wartość. Istnieje kilka różnych sposobów sprawdzania, czy wartość jest NaN, ale niestety większość z nich jest zawodna., Przejdźmy przez niektóre z nich i zobaczmy, jak im się nie uda.

logiczną rzeczą do zrobienia jest sprawdzenie, czy wynik jest równy NaN.

Co tu się dzieje? W JavaScript NaN ma rozróżnienie, że jest jedyną wartością, która nie jest sobie równa. Oznacza to, że nie możemy”dowiedzieć się, czy wartość jest NaN, sprawdzając równość NaN, ponieważ odpowiedź zawsze będzie brzmiała nie.

czego jeszcze możemy spróbować? Co powiesz na wbudowaną funkcję isNaN?,

Super! To chyba działa. I w rzeczywistości działa to w pewnych okolicznościach. Jednak, pomimo nazwy, celem isNaN funkcja nie”t, aby sprawdzić, czy wartość jest NaN. Zamiast tego, celem jest sprawdzenie, czy wartość nie może być wymuszona do liczby. Z tego powodu może zwrócić fałszywe alarmy., Rozważ, co następuje:

chyba że masz pewność, że będziesz miał do czynienia tylko z numerami lub NaN, funkcja isNaN nie nadaje się do tego celu.

okazuje się jednak, że ECMAScript 6 tworzy nową funkcję w celu sprawdzenia, czy wartość jestNaN. Co mylące, funkcja ta jest również wywoływana isNaN, chociaż jest dołączona do obiektu Number zamiast bezpośrednio do obiektu globalnego., Można go używać w następujący sposób:

doskonale! Mamy metodę, która naprawdę działa. Niestety, Number.isNaN jest dostępny tylko w nowszych wersjach Firefoksa i Chrome, a nie jest jeszcze obsługiwany w IE lub innych głównych przeglądarkach. Może to być realne podejście w przyszłości, ale na razie może być stosowane tylko w bardzo wąskich okolicznościach.

może zamiast tego sprawdzimyNaN?

tak, czytasz to poprawnie., W JavaScript wartość NaN jest typu number. To nie będzie zbyt pomocne.

więc co możemy zrobić, aby uzyskać coś, co działa poprawnie, ale jest również dostępne w przeglądarce? Pamiętaj, jak wspomniałem, że NaN jest jedyną wartością w JavaScript, która nie jest sobie równa? Możemy to wykorzystać.

obecnie najlepszym sposobem sprawdzenia, czy wartość jestNaN jest sprawdzenie, czy nie jest równa sobie. Jeśli tak, to wiesz, że jest to NaN.,

oczywiście korzystanie z tej techniki nie jest szczególnie czytelne, więc powszechne jest owijanie jej w metodę użytkową, która wyraźniej komunikuje intencję. Zarówno Underscore, jak i Lo-Dash zapewniają implementacje.

Mam nadzieję, że pomogło ci to lepiej zrozumieć dziwactwaNaN.

dzięki za przeczytanie!

Josh Clanton

Dodaj komentarz

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