2011-05-13 11 views
7

Encontré un error en una secuencia de comandos que se escribió, y estoy teniendo problemas para averiguar exactamente qué está causando los problemas. Específicamente:¿Qué conversiones de tipo Javascript están pasando aquí?

"49px" < 50 === false 

Hay dos diferentes conversiones que se me ocurren aquí:

49 < 50 === true 
"49px" < "50" === true 
"49" < 50 === true // just for the hell of it 

lo arreglé con:

parseInt("49px") < 50 === true 

Entonces, ¿por qué este resultado false? ¿Qué está pasando exactamente aquí?

+1

Consulte el [Algoritmo abstracto de comparación relacional] (http://es5.github.com/#x11.8.5) ... –

+0

La corrección no es adecuada. El número ("49px") ocurre, parseInt/Float se comporta de manera diferente – user422039

+1

y no especifica una raíz en su parse int ?! https://developer.mozilla.org/es/JavaScript/Reference/Global_Objects/parseInt ¡hazlo ahora mientras no sea demasiado tarde! – Incognito

Respuesta

10

Si un operando es un número y otro operando es una cadena, entonces the string is converted to a number y luego se realiza la comparación.

Si la cadena no se puede convertir a un número, se convierte a NaN, y la comparación siempre devuelve false.

3

Cuando se le pide a javascript que compare un número con otra cosa, intenta convertir ese "algo más" en un número. En este caso, "49px" evalúa a NaN por lo que NaN < 50 es false.

+0

¡maldición, solo unos minutos demasiado tarde! –

+0

Sr. Vidas, gracias por limpiar mi desorden. –

Cuestiones relacionadas