MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Sommario

La funzione isNaN() determina se un valore è NaN o no.

Nota: le conversioni di tipo nella funzione isNaN seguono delle regole particolari: alternativamente per determinare se un valore non è un numero si può usare la funzione Number.isNaN(), definito in ECMAScript 6, o l'operatore typeof.

Sintassi

isNaN(number)

Parametri

number
Il valore da controllare.

Descrizione

La necessità di una funzione isNaN()

A differenza di tutti gli altri valori in JavaScript, non è possibile usare gli operatori di uguaglianza (== e ===) per determinare se un valore è NaN oppure no, perché entrambe le uguaglianze NaN == NaN e NaN === NaN vengono considerate false. Ecco perché è necessaria una funzione isNaN().

L'origine del valore NaN

Il valore NaN è generato da un'operazione aritmetica il cui risultato è undefined o un valore non rappresentabile. Tali valori non rappresentano necessariamente un valore oltre i limiti. NaN può anche essere il risultato del trasformare valori non-numerici dai quali non è possibile ottenere un numero in numeri.

Per esempio, dividere zero per zero restituisce NaN, ma dividere un qualsiasi altro numero per zero no.

Comportamenti particolari

Già dalla prima versione della specifica della funzione isNaN, il suo comportamento con valori non-numerici può confondere. Quando il parametro della funzione isNaN non è di tipo Number, questo viene prima trasformato in un numero. Il test per determinare se il parametro è NaN viene effettuato sul valore convertito. Quindi per i valori non-numerici che possono essere trasformati in un numero diverso da NaN la funzione restituisce false. La stringa vuota, per esempio, suciramente non è un numero, ma la funzione restituisce false. La confusione nasce dal fatto che il termine "not a number" (rappresentato da NaN) ha un significato per i numeri rappresentati come valori a virgola mobile IEEE-754. La funzione dovrebbe quindi essere interpretata come "È questo valore, quando convertito in un numero, un valore "Not a Number" secondo lo standard IEEE-754?"

La prossima versione di ECMAScript (ES6) definiesce la funzione Number.isNaN(). Number.isNaN(), che ritorna false per tutti i valori non-numerici, sarà un metodo affidabile per sapere se un numero è NaN o no. In assenza di Number.isNaN, l'espressione (x !== x) è il metodo più affidabile per determinare se un numero è NaN oppure no, perché evita i falsi positivi generati dalla funzione isNaN().

Esempi

var x = NaN;
isNaN(x);        // true
Number.isNaN(x); // true
x !== x;         // true

var x = undefined;
isNaN(x);        // true, perché undefined viene convertito in NaN
Number.isNaN(x); // false
x !== x;         // false

var x = {};
isNaN(x);        // true, perché {} viene convertito in NaN
Number.isNaN(x); // false
x !== x;         // false

isNaN(true);     // false, perché true viene convertito in 1
isNaN(null);     // false, perché null viene convertito in 0
isNaN(37);       // false

// Stringhe
isNaN("37");     // false, perché "37" viene convertito in 37
isNaN("37.37");  // false, perché "37.37" viene convertito in 37.37
isNaN("");       // false, perché una stringa vuota viene convertita in 0
isNaN(" ");      // false, perché una stringa con soli spazi viene convertita in 0

// !!! Ecco un esempio di falso positivo
var x = "37ab";
isNaN(x);        // true, perché "37ab" viene convertito in NaN
Number.isNaN(x); // false
x !== x;         // false

// Date
isNaN(new Date()); // false, perché una data che viene convertita in un
                   //        numero ritorna un valore intero

var x = new Date().toString();
isNaN(x);        // true, perché il metodo new Date().toString() restituisce una
                 //       stringa alfanumerica, che viene convertita in NaN
Number.isNaN(x); // false
x !== x;         // false

Specifiche

Specifica Stato Commenti
ECMAScript 1st Edition. Standard Definizione iniziale.
ECMAScript 5.1 (ECMA-262)
The definition of 'isNaN' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'isNaN' in that specification.
Standard  

Compatibilità con i browser

Funzionalità Chrome Firefox (Gecko) Internet Explorer Opera Safari
Supporto di base (Yes) (Yes) (Yes) (Yes) (Yes)
Funzionalità Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Supporto di base (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Vedi anche

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: massic80, nicolo-ribaudo
 Ultima modifica di: massic80,