Od najwcześniejszych wersji specyfikacji funkcji isNaN
, jej zachowanie dla argumentów nienumerycznych jest mylące. Gdy argument funkcji isNaN
nie jest typu Liczba, wartość jest najpierw przekształcana w liczbę. Wynikowa wartość jest następnie testowana w celu określenia, czy jest to NaN
. Tak więc dla nie-liczb, które po przekształceniu do typu liczbowego dają prawidłową wartość liczbową inną niż NaN (w szczególności pusty łańcuch i wartości logiczne, które po wymuszeniu dają wartości liczbowe zero lub jeden), zwrócona wartość „fałsz” może być nieoczekiwana; na przykład pusty ciąg z pewnością nie jest liczbą. Zamieszanie wynika z faktu, że termin „nie liczba” ma określone znaczenie dla liczb przedstawionych jako wartości zmiennoprzecinkowe IEEE-754. Funkcję należy interpretować jako odpowiedź na pytanie, „czy ta wartość, wymuszona na wartość liczbową, jest wartością IEEE-754„ Not A Number ”?”
ECMAScript 2015 zawiera Number.isNaN()
. Number.isNaN(x)
to niezawodny sposób na sprawdzenie, czy x
to NaN
, czy nie. Jednak nawet w przypadku Number.isNaN
znaczenie NaN
pozostaje dokładnym znaczeniem liczbowym, a nie „nie jest liczbą”. Alternatywnie, w przypadku braku Number.isNaN
, wyrażenie (x != x)
jest bardziej niezawodnym sposobem sprawdzenia, czy zmienna x
jest NaN
lub nie, ponieważ wynik nie podlega fałszywym alarmom, które powodują, że isNaN
jest zawodny.
Wypełnienie dla isNaN
byłoby (wypełnienie wykorzystuje unikalną cechę NaN
):