jesteś tutaj
301
Typy, równość, konwersje i cały ten jazz
Stosowanie wartości NaN
Mógłbyś sądzić, że wartość
NaN
jest rzadko stosowana i spotykana, gdybyś jednak miał
do czynienia z jakimkolwiek kodem operującym na liczbach, przekonałbyś się, jak
często się pojawia. W takim kodzie najczęściej wykonywaną operacją jest sprawdzanie,
czy wartość zmiennej jest równa
NaN
. Zważywszy na wszystko, co już wiesz o języku
JavaScript, wykonanie takiego testu może się wydawać czymś oczywistym.
if (myNum == NaN) {
myNum = 0;
}
Każda rozsądnie myśląca osoba powiedziałaby, że właśnie tak można sprawdzić, czy
zmienna zawiera wartość
NaN
. Jednak takie rozwiązanie nie działa? Dlaczego? Otóż
NaN
nie jest równa żadnej innej wartości, nie jest nawet równa sobie samej; dlatego też
jakiekolwiek testy równości z tą wartością nie mają najmniejszego sensu. Zamiast nich
należy użyć specjalnej funkcji, czyli
isNaN
. Poniżej pokazaliśmy ją w działaniu.
if (isNaN(myNum)) {
myNum = 0;
}
Sprawy stają się jeszcze dziwniejsze
Zastanówmy się nad tym jeszcze trochę. Skoro
NaN
nie jest liczbą, na co wskazywałaby
angielska nazwa tej wartości — „Not a Number” (to nie liczba) — to czym jest? Czy
nie byłoby prościej, gdyby jej nazwa określała to, czym ta wartość jest, a nie to, czym
nie jest? Jak sądzisz, czym jest
NaN
? W ramach ułatwienia sobie odpowiedzi na to
pytanie, sprawdźmy jej typ.
var test11 = 0 / 0;
console.log(typeof test11);
Co jest, do diabła!? Typem wartości
NaN
jest liczba? Jak coś, co nie jest liczbą, może
mieć taki sam typ jak liczby? Spokojnie, weź głęboki oddech. Wyobraź sobie, że
NaN
jest wartością, której nazwa została nie najlepiej dobrana. Ktoś powinien ją raczej
nazwać „liczbą, która nie może być reprezentowana na komputerze” (choć zgadzamy
się, że akronim takiej nazwy nie byłby równie krótki i łatwy do zapamiętania). Jeśli
wyobrazisz sobie
NaN
w taki sposób, będziesz mógł o niej myśleć jak o liczbie, której
nie można przedstawić (a przynajmniej nie na komputerze).
Nie wahaj się — dodaj
NaN
na listę „strefy cieni” języka JavaScript.
Mógłbyś oczekiwać, że taki warunek
będzie działać, ale tak nie jest.
Użyj funkcji isNaN, która
zwraca true, jeśli przekazana
wartość nie jest liczbą.
ĭOH
'REU]H
Konsola JavaScript
number
Jeśli mózg Ci
jeszcze nie wybuchł,
najprawdopodobniej
powinieneś użyć tej
książki na podpałkę.
Oto co uzyskaliśmy.
Get Programowanie w JavaScript Rusz głową! now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.