Siden de allerførste versioner af isNaN
-funktionsspecifikationen har dens opførsel for ikke-numeriske argumenter været forvirrende. Når argumentet til isNaN
-funktionen ikke er af typen Number, tvinges værdien først til et tal. Den resulterende værdi testes derefter for at bestemme, om den er NaN
. Således for ikke-tal, der, når de tvinges til en numerisk type, resulterer i en gyldig ikke-NaN-numerisk værdi (især den tomme streng og boolske primitiver, som når de tvinges giver numeriske værdier nul eller en), kan den “falske” returnerede værdi være uventet; den tomme streng, for eksempel, er bestemt “ikke et tal.” Forvirringen stammer fra det faktum, at udtrykket “ikke et tal” har en specifik betydning for tal, der er repræsenteret som IEEE-754 flydende punktværdier. Funktionen skal fortolkes som besvarelse af spørgsmålet, “er denne værdi, når den tvinges til en numerisk værdi, en IEEE-754” Ikke et tal “-værdi?”
ECMAScript 2015 indeholder Number.isNaN()
-funktion. Number.isNaN(x)
er en pålidelig måde at teste, om x
er NaN
. Selv med Number.isNaN
forbliver betydningen af NaN
dog den nøjagtige numeriske betydning og ikke “ikke et tal”. Alternativt, i fravær af Number.isNaN
, er udtrykket (x != x)
en mere pålidelig måde at teste, om variabel x
er NaN
eller ej, da resultatet ikke er underlagt de falske positive, der gør isNaN
upålidelige.
En polyfyldning til isNaN
ville være (polyfyldningen udnytter den unikke karakter, der aldrig er lig med sig selv for NaN
):