Întrucât cele mai vechi versiuni ale specificației funcției isNaN
, comportamentul său pentru argumentele non-numerice a fost confuz. Când argumentul pentru funcția isNaN
nu este de tipul Number, valoarea este mai întâi constrânsă la un Number. Valoarea rezultată este apoi testată pentru a determina dacă este NaN
. Astfel, pentru non-numere care atunci când sunt constrânse la tipul numeric, rezultă o valoare numerică non-NaN validă (în special șirul gol și primitivele booleene, care atunci când sunt constrânse dau valori numerice zero sau una), valoarea returnată „falsă” poate fi neașteptată; șirul gol, de exemplu, cu siguranță „nu este un număr”. Confuzia provine din faptul că termenul, „nu un număr”, are o semnificație specifică pentru numerele reprezentate ca valori în virgulă IEEE-754. Funcția ar trebui interpretată ca răspuns la întrebare, „este această valoare, atunci când este forțată la o valoare numerică, o valoare IEEE-754” Nu este un număr „?”
ECMAScript 2015 conține Number.isNaN()
funcție. Number.isNaN(x)
este o modalitate fiabilă de a testa dacă x
este NaN
sau nu. Chiar și cu Number.isNaN
, totuși, semnificația NaN
rămâne semnificația numerică precisă și nu, „nu un număr”. Alternativ, în absența Number.isNaN
, expresia (x != x)
este un mod mai fiabil de a testa dacă variabila x
este NaN
sau nu, deoarece rezultatul nu este supus falsului pozitiv care face isNaN
nesigur.
Un polyfill pentru isNaN
ar fi (polyfill utilizează caracteristica unică egală cu ea însăși a NaN
):