2014-06-06 11 views
6

perché la funzione isNaN nel nodojs restituisce false nei seguenti casi?isNaN function in nodejs

isNaN(''),isNaN('\n'),isNaN('\t') 

questo è molto strano.

qualcuno ha qualche idea come pensavo che NNA fosse per non è un numero.

qualcuno può chiarire

Grazie in anticipo!

risposta

11

Perché non sta passando un numero, lo farà convertirlo in numero. Tutti coloro che si convertono 0 che è 0 e non NaN

Number('') 
0 
Number('\n') 
0 
Number('\t') 
0 
isNaN(0) 
false 

noti che NaN non sta per "non un numero di JavaScript". In fact it's completely separate from JavaScript ed esiste in tutte le lingue che supportano i float IEEE-754.

Se si desidera verificare se qualcosa è un numero javascript, il controllo è

if (typeof value === "number") { 

} 
+3

Si noti che il valore 'NaN' è un numero Javascript =>' tipo di NaN === 'numero' // true' – mjlescano

0

isNaN è un "non è un numero" funzione, restituisce true quando nessun numero sono forniti ad esso come parametro e falsa quando un numero è dato

+0

Immagino che volevi dire "falso" quando viene indicato un numero. Potresti voler modificare la tua risposta per correggerla. –

3

Nan è una cosa molto particolare: si tratta di un valore in virgola mobile che disponga di adeguate bandiere NaN impostati, per l'IEEE754 spec (Wikipedia article).

Se si desidera verificare se una stringa ha un valore numerico, è possibile eseguire parseFloat(str) (MDN on parseFloat). Se non riesce a trovare alcun contenuto numerico valido o trova caratteri non validi prima di trovare i numeri, restituirà un valore NaN.

Quindi prova a fare isNaN(parseFloat(str)) - mi dà true per tutti e tre gli esempi pubblicati.

+0

sì questo è quello che sto usando ma sarebbe stato più semplice se isNaN avrebbe fatto il trucco .. – azero0

+0

@ A-0-: isNaN ha uno scopo specifico; per rilevare i valori NaN secondo la specifica IEEE754. Non è previsto un controllo numerico generale, che viene eseguito principalmente in parseFloat il cui compito è la costruzione di numeri da stringhe. Qui utilizziamo isNaN solo perché parseFloat restituisce un valore NaN quando fallisce; se avesse generato un errore, non useremmo isNaN. Non confondere isNaN con un tipo di isNumeric - isNaN funziona solo su valori numerici, non su stringhe e controlla un tipo specifico di valore. –

3

isNan() è progettato per aiutare a rilevare cose che sono "matematicamente indefinite" - ad es. 0/0 -

node 
> isNaN(0/0) 
true 
> isNaN(1/0) 
false 
> isNaN(Math.sqrt(-1)) 
true 
> isNaN(Math.log(-1)) 
true 

L'altro consiglio che hai qui a questa domanda su come rilevare i numeri è solido.