Sinds de allereerste versies van de isNaN
functiespecificatie, is het gedrag voor niet-numerieke argumenten verwarrend. Als het argument voor de functie isNaN
niet van het type Getal is, wordt de waarde eerst omgezet in een getal. De resulterende waarde wordt vervolgens getest om te bepalen of het NaN
is. Dus voor niet-getallen die, wanneer ze worden afgedwongen naar numeriek type, resulteren in een geldige niet-NaN numerieke waarde (met name de lege string en booleaanse primitieven, die wanneer ze worden afgedwongen numerieke waarden nul of één geven), kan de “false” geretourneerde waarde onverwacht zijn; de lege string is bijvoorbeeld zeker “geen getal”. De verwarring komt voort uit het feit dat de term “geen getal” een specifieke betekenis heeft voor getallen die worden weergegeven als IEEE-754 drijvende-kommawaarden. De functie moet worden geïnterpreteerd als het beantwoorden van de vraag “is deze waarde, wanneer deze wordt afgedwongen tot een numerieke waarde, een IEEE-754” Not A Number “-waarde?”
ECMAScript 2015 bevat de Number.isNaN()
functie. Number.isNaN(x)
is een betrouwbare manier om te testen of x
NaN
is of niet. Zelfs met Number.isNaN
blijft de betekenis van NaN
de exacte numerieke betekenis en niet “geen getal”. Als alternatief, in de afwezigheid van Number.isNaN
, is de uitdrukking (x != x)
een betrouwbaardere manier om te testen of variabele x
is NaN
of niet, aangezien het resultaat niet onderhevig is aan de valse positieven die isNaN
onbetrouwbaar maken.
Een polyfill voor isNaN
zou zijn (de polyfill maakt gebruik van de unieke eigenschap die nooit gelijk is aan zichzelf van NaN
):