Siden de aller første versjonene av isNaN
-funksjonsspesifikasjonen, har oppførselen til ikke-numeriske argumenter vært forvirrende. Når argumentet til isNaN
-funksjonen ikke er av typen Number, tvinges verdien først til et Number. Den resulterende verdien blir deretter testet for å avgjøre om den er NaN
. Således for ikke-tall som når de blir tvunget til en numerisk type resulterer i en gyldig ikke-NaN numerisk verdi (spesielt den tomme strengen og boolske primitiver, som når de blir tvunget gir numeriske verdier null eller en), kan den «falske» returnerte verdien være uventet den tomme strengen, for eksempel, er sikkert «ikke et tall.» Forvirringen stammer fra det faktum at begrepet «ikke et tall», har en spesifikk betydning for tall som er representert som IEEE-754 flytende punktverdier. Funksjonen skal tolkes som å svare på spørsmålet, «er denne verdien, når den tvinges til en numerisk verdi, en IEEE-754» Not A Number «-verdi?»
ECMAScript 2015 inneholder Number.isNaN()
-funksjon. Number.isNaN(x)
er en pålitelig måte å teste om x
er NaN
. Selv med Number.isNaN
forblir imidlertid betydningen av NaN
den presise numeriske betydningen og ikke «ikke et tall». Alternativt, i fravær av Number.isNaN
, er uttrykket (x != x)
en mer pålitelig måte å teste om variabel x
er NaN
eller ikke, ettersom resultatet ikke er underlagt falske positive som gjør isNaN
upålitelige.
En polyfyll for isNaN
vil være (polyfill utnytter den unike karakteren til NaN
) som aldri er lik-seg-selv. / p>