--- title: isNaN() slug: Web/JavaScript/Reference/Global_Objects/isNaN translation_of: Web/JavaScript/Reference/Global_Objects/isNaN ---
La funzione isNaN() determina se un valore è {{jsxref("NaN")}} o no.
Nota: le conversioni di tipo nella funzione isNaN seguono delle regole {{jsxref("Global_Objects/isNaN", "particolari", "#Description", 1)}}: alternativamente per determinare se un valore non è un numero si può usare la funzione {{jsxref("Number.isNaN()")}}, definito in ECMAScript 6, o l'operatore {{jsxref("Operators/typeof", "typeof")}}.
isNaN(number)
numberisNaN()A differenza di tutti gli altri valori in JavaScript, non è possibile usare gli operatori di uguaglianza (== e ===) per determinare se un valore è {{jsxref("NaN")}} oppure no, perché entrambe le uguaglianze NaN == NaN e NaN === NaN vengono considerate false. Ecco perché è necessaria una funzione isNaN().
NaNIl valore NaN è generato da un'operazione aritmetica il cui risultato è {{jsxref("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.
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 {{jsxref("Number")}}, questo viene prima trasformato in un numero. Il test per determinare se il parametro è {{jsxref("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 {{jsxref("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().
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
| Specifica | Stato | Commenti |
|---|---|---|
| ECMAScript 1st Edition. | Standard | Definizione iniziale. |
| {{SpecName('ES5.1', '#sec-15.1.2.4', 'isNaN')}} | {{Spec2('ES5.1')}} | |
| {{SpecName('ES6', '#sec-isnan-number', 'isNaN')}} | {{Spec2('ES6')}} |
{{ CompatibilityTable() }}
| Funzionalità | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Supporto di base | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} |
| Funzionalità | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Supporto di base | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} |