Od nejranějších verzí specifikace funkce isNaN
je její chování pro nečíselné argumenty matoucí. Když argument funkce isNaN
není typu Number, je hodnota nejprve vynucena na Number. Výsledná hodnota se poté testuje, aby se zjistilo, zda je NaN
. U nečíselných čísel, které při vynucení na číselný typ vedou k platné numerické hodnotě jiné než NaN (zejména prázdný řetězec a logická primitiva, která při vynucení dávají číselné hodnoty nula nebo jedna), může být „false“ vrácená hodnota neočekávaná; například prázdný řetězec určitě „není číslo“. Zmatek pramení ze skutečnosti, že výraz „není číslo“ má specifický význam pro čísla představovaná jako hodnoty s plovoucí desetinnou čárkou IEEE-754. Funkce by měla být interpretována jako odpověď na otázku, „je tato hodnota, když je vynucena číselnou hodnotou, hodnota IEEE-754„ Not A Number “?“
ECMAScript 2015 obsahuje Number.isNaN()
funkce. Number.isNaN(x)
je spolehlivý způsob, jak otestovat, zda x
je NaN
. I v případě Number.isNaN
však význam NaN
zůstává přesným číselným významem, nikoli „číslem“. Alternativně, při absenci Number.isNaN
je výraz (x != x)
spolehlivější způsob, jak otestovat, zda proměnná x
je NaN
nebo ne, protože výsledek nepodléhá falešným pozitivům, díky nimž je isNaN
nespolehlivý.
Polyfill for isNaN
by byl (polyfill využívá jedinečnou charakteristiku, která se nikdy nerovná sobě NaN
):