A isNaN
függvényleírás legkorábbi verziói óta a nem numerikus argumentumokkal kapcsolatos viselkedése zavaró. Ha a isNaN
függvény argumentuma nem a Szám típusú, akkor az értéket először egy Számra kényszerítik. A kapott értéket ezután teszteljük annak megállapítására, hogy ez NaN
Így azon nem számok esetében, amelyek numerikus típusra kényszerítve érvényes nem NaN numerikus értéket eredményeznek (nevezetesen az üres karakterláncot és a logikai primitíveket, amelyek kényszerítéskor nulla vagy egy numerikus értéket adnak), a “hamis” visszaadott érték váratlan lehet; az üres karakterlánc például “nem szám”. A zavart abból a tényből fakad, hogy a “nem szám” kifejezésnek konkrét jelentése van az IEEE-754 lebegőpontos értékeként ábrázolt számok vonatkozásában. A függvényt úgy kell értelmezni, hogy megválaszolja a kérdést: “Ez az érték numerikus értékre kényszerítve egy IEEE-754” Nem szám “érték?”
Az ECMAScript 2015 tartalmazza a Number.isNaN()
függvény. A Number.isNaN(x)
megbízható módszer annak tesztelésére, hogy a x
NaN
-e vagy sem. Még Number.isNaN
esetén is a NaN
jelentése továbbra is a pontos numerikus jelentés, és nem a “nem szám”. Alternatív megoldásként Number.isNaN
hiányában a (x != x)
kifejezés megbízhatóbb módja annak tesztelésére, hogy a x
NaN
vagy sem, mivel az eredmény nem függ azoktól a hamis pozitív eredményektől, amelyek megbízhatatlanná teszik a isNaN
t.
A isNaN
polifill kitöltése a következő lenne (a polifill kihasználja a (z) NaN
egyedi egyedülálló, soha nem egyenlő sajátosságát):