qual è la parola chiave riservata per NaN in javascript?
-
05-09-2019 - |
Domanda
se voglio testare il risultato di un'espressione e la funzione sarebbe tornato NaN
come potrei controllare che?
esempi:
$('amount').value.toInt()!='NaN'
^ non funziona e presumo che il valore restituito non è una stringa,
$('amount').value.toInt()!=NaN
^ doesnt sembrano funzionare sia e questo sembra ovvio
così come faccio verificato se il valore restituito non è un numero?
Soluzione
Il valore NaN è definito per essere diverso da tutto, compreso se stesso. Verificare se un valore è NaN con la isNaN()
funzione, in modo abbastanza appropriato. (ECMAScript 6 aggiunge un Number.isNan()
funzione con differenti semantica per argomenti non-numero, ma non è supportata in tutti i browser ma a partire dal 2015).
Ci sono due proprietà predefinite disponibili con un valore NaN: il globale proprietà NaN
(cioè window.NaN
nei browser), e Number.NaN
. Si tratta di non una parola chiave lingua. In browser più vecchi, la proprietà NaN
potrebbe essere sovrascritto, con risultati potenzialmente di confusione, ma con la ECMAScript 5 di serie che è stato fatto non-scrivibile .
- Come @some sottolineato nei commenti, v'è anche la funzione globale isFinite () che può essere utile.
Altri suggerimenti
il modo migliore per controllare il risultato di un'operazione numerica contro NaN è aproach questo modo, Esempio:
var x = 0;
var y = 0;
var result = x/y; // we know that result will be NaN value
// to test if result holds a NaN value we should use the following code :
if(result !=result){
console.log('this is an NaN value');
}
ed è fatta.
il trucco è che NaN non può essere paragonato a qualsiasi altro valore anche con esso auto (NaN! = NaN è sempre vero in modo che possiamo approfittare di questo e di confrontare risultato contro se stesso)
questo è JavaScript (una lingua buona e bizzarro)
operatore di uguaglianza (== === e) non può essere utilizzato per testare un valore contro NaN. Utilizzare Number.isNaN () o isNaN (), invece.
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true