Sin dalle primissime versioni della specifica della funzione isNaN
, il suo comportamento per argomenti non numerici è stato fonte di confusione. Quando l’argomento della funzione isNaN
non è di tipo Number, il valore viene prima convertito in un numero. Il valore risultante viene quindi verificato per determinare se è NaN
. Pertanto, per i non numeri che quando costretti al tipo numerico risultano in un valore numerico non NaN valido (in particolare la stringa vuota e le primitive booleane, che quando forzate danno valori numerici zero o uno), il valore restituito “falso” può essere inaspettato; la stringa vuota, ad esempio, è sicuramente “non un numero”. La confusione deriva dal fatto che il termine “non un numero” ha un significato specifico per i numeri rappresentati come valori in virgola mobile IEEE-754. La funzione deve essere interpretata come una risposta alla domanda, “è questo valore, se costretto a un valore numerico, un valore IEEE-754” Not A Number “?”
ECMAScript 2015 contiene Number.isNaN()
funzione. Number.isNaN(x)
è un modo affidabile per verificare se x
è NaN
o meno. Anche con Number.isNaN
, tuttavia, il significato di NaN
rimane il preciso significato numerico e non “non un numero”. In alternativa, in assenza di Number.isNaN
, l’espressione (x != x)
è un modo più affidabile per verificare se la variabile x
è NaN
o meno, poiché il risultato non è soggetto a falsi positivi che rendono isNaN
inaffidabile.
Un polyfill per isNaN
sarebbe (il polyfill sfrutta la caratteristica unica mai uguale a se stesso di NaN
):