Funktion isNaN
varhaisimmista versioista lähtien sen käyttäytyminen ei-numeeristen argumenttien suhteen on ollut hämmentävää. Kun isNaN
-funktion argumentti ei ole tyyppiä Numero, arvo pakotetaan ensin Numeroksi. Tuloksena oleva arvo testataan sitten sen selvittämiseksi, onko se NaN
. Siten muille kuin numeroille, jotka pakotetaan numeeriseen tyyppiin, tuloksena on kelvollinen ei-NaN-lukuarvo (erityisesti tyhjä merkkijono ja loogiset primitiivit, jotka pakotettuna antavat numeeriset arvot nollan tai yhden), ”väärä” palautettu arvo voi olla odottamaton; esimerkiksi tyhjä merkkijono ei varmasti ”ole numero”. Hämmennys johtuu siitä, että termillä ”ei numero” on erityinen merkitys numeroille, jotka esitetään IEEE-754-liukulukuarvoina. Funktion tulisi tulkita vastaavan kysymykseen: ”Onko tämä arvo, kun se pakotetaan numeeriseksi arvoksi, IEEE-754” Ei numero ”-arvo?”
ECMAScript 2015 sisältää Number.isNaN()
-toiminto. Number.isNaN(x)
on luotettava tapa testata, onko x
NaN
vai ei. Jopa Number.isNaN
-kohdassa NaN
-merkityksen merkitys on kuitenkin edelleen tarkka numeerinen merkitys eikä ”ei luku”. Vaihtoehtoisesti ilmaisun Number.isNaN
puuttuessa lauseke (x != x)
on luotettavampi tapa testata, onko muuttuja x
on NaN
vai ei, koska tulokseen ei liity vääriä positiivisia tuloksia, jotka tekevät isNaN
epäluotettavaksi.
Polyfill-täyttö kohteelle isNaN
olisi (polyfill-täyttö hyödyntää NaN
-ominaisuuden ainutlaatuista koskaan yhteneväisyyttä):