2011-11-25 19 views
16

Hay algo extraño.isNaN() frente a parseInt() confusión

Por qué
con isNaN("") me sale False
Pero
con parseInt("") consigo NaN
?

+2

Posible duplicado de http://stackoverflow.com/questions/825402/why-does-isnan-equal-false –

+0

Porque 'isNaN' no usa' parseInt'? –

+1

La clave es entender la diferencia entre ** conversión de tipo ** y ** análisis **, 'esNaN' detrás de las escenas, hará la conversión de tipo de su argumento al tipo' Número', mientras 'parseInt' intentará * analizar * la cadena proporcionada. Ver también: http://stackoverflow.com/questions/4090518/string-to-int-use-parseint-or-number – CMS

Respuesta

19

isNaN toma un número entero como un argumento - por lo tanto, convierte JS "" a 0

parseInt toma una cadena como un argumento - por lo tanto, una cadena vacía no es un número

+0

ya respondida - duplicate http://stackoverflow.com/questions/825402/why-does-isnan -equal-false –

+10

'isNaN' no toma un" entero ", * espera * un Número (que son todos los dobles de IEEE-754, por ejemplo' isNaN (0.5) 'produce' falso'), es por eso que intenta * escriba convertir * el valor del argumento en el número – CMS

+0

Su derecho, pero estaba tratando de mantener la lógica simple. –

0

Esto es porque "" es equivalente a cero en JavaScript Pruebe "" == 0. Esto significa que si intenta evaluarlo en una ecuación numérica, aparecerá como 0. Cuando lo analiza, por otro lado, se da cuenta de que no hay nada allí.

Como alternativa al parseInt puede usar Math.floor. Esto le dará 0 para "".

+0

¿Qué quiere decir exactamente con "es equivalente"? – Kos