Które wyrażenie w języku JavaScript zwróci wartość NaN?
"5" * "2"
* zamienia napisy z cyframi na liczby, więc wynik to 10.parseInt("px12")
parseInt nie znajduje na początku żadnej cyfry i zwraca NaN.parseInt("12px")
parseInt zbiera cyfry od początku napisu i zatrzymuje się na literze, więc zwraca 12.Number("")
Number zamienia pusty napis na 0. NaN dałoby dopiero parseInt("").parseInt czyta napis od lewej strony i zbiera cyfry tak długo, jak się pojawiają. Jeśli już pierwszy znak nie jest cyfrą (ani znakiem plus lub minus), funkcja nie ma od czego zacząć i zwraca NaN. Napis "px12" zaczyna się od liter, więc parseInt("px12") daje NaN, mimo że cyfry stoją dalej.
Zachowanie to przydaje się przy odczycie wartości z CSS: parseInt("250px") daje 250. Gdy dane pochodzą od użytkownika, wynik zawsze sprawdzaj funkcją isNaN() albo Number.isNaN(), zanim zaczniesz na nim liczyć. Dobrym nawykiem jest też podanie podstawy systemu: parseInt(tekst, 10).
Każde z błędnych wyrażeń zwraca liczbę, choć z różnych powodów. parseInt("12px") zaczyna od cyfr 1 i 2, zatrzymuje się na literze p i zwraca 12. Litery na końcu napisu nie przeszkadzają.
Number("") działa inaczej niż parseInt: ocenia cały napis naraz i pusty napis zamienia na 0. Dla porównania parseInt("") dałoby NaN, a Number("12px") również NaN, bo cały napis musi być liczbą. To częsta pułapka przy pustych polach formularza.
Mnożenie dwóch napisów z cyframi, "5" * "2", daje 10, bo operator * zawsze zamienia oba składniki na liczby. Tylko plus zachowuje się inaczej: "5" + "2" skleja tekst i daje "52".
Gdy wartość NaN trafi do dalszych obliczeń, każdy kolejny wynik też będzie NaN. Dlatego błąd z jednego pola formularza potrafi zepsuć całe podsumowanie, np. sumę zamówienia.