2011-11-25 14 views
16

C'è qualcosa di strano.isNaN() vs. parseInt() confusione

Perché
con isNaN("") ottengo False
Ma
con parseInt("") ricevo NaN
?

+2

Possibile duplicato di http://stackoverflow.com/questions/825402/why-does-isnan-equal-false –

+0

Perché 'isNaN' non usa' parseInt'? –

+1

La chiave è capire la differenza tra ** type conversion ** e ** parsing **, 'isNaN' dietro le quinte, eseguirà la conversione del suo argomento nel tipo' Number', mentre 'parseInt' proverà a * analizzare * la stringa fornita. Vedi anche: http://stackoverflow.com/questions/4090518/string-to-int-use-parseint-or-number – CMS

risposta

19

isNaN prende un intero come argomento - quindi JS converte "" a 0

parseInt prende una stringa come argomento - quindi una stringa vuota non è un numero

+0

già risposto - duplicato http://stackoverflow.com/questions/825402/why-does-isnan -equal-false –

+10

'isNaN' non accetta un" intero ", * si aspetta * un numero (che sono tutti IEEE-754 raddoppia, es.' isNaN (0.5) 'produce' falso'), ecco perché cerca di * Digitare convert * il valore dell'argomento al numero – CMS

+0

Il tuo diritto - ma stavo cercando di mantenere la logica semplice. –

0

Questo perché "" è equivalente a zero in JavaScript. Prova "" == 0. Ciò significa che se provi a valutarlo in un'equazione numerica, verrà visualizzato come 0. Quando lo analizzi, d'altra parte, realizza che non c'è niente lì.

In alternativa a parseInt è possibile utilizzare Math.floor. Questo ti darà 0 per "".

+0

Cosa intendi esattamente per "è equivalente"? – Kos