De acuerdo con la documentación de Mozilla en Javascript Comparison Operators
Si los dos operandos no son del mismo tipo, JavaScript convierte los operandos continuación, se aplica un estricto comparación. Si cualquiera de los operandos es un número o un booleano, los operandos son convertidos a números; Si bien operando es una cadena, el otro es convierte en una cadena
lo que está sucediendo realmente es que las cuerdas se convierten en números. Por ejemplo:
1 == '1'
convierte 1 == Number('1')
convierte 1 == 1
: true
Entonces prueba este: 1 == '1.'
convierte 1 == Number('1.')
convierte 1 == 1
: true
Si se estaban convirtiendo en cadenas, entonces se obtendría '1' == '1.'
, lo que sería falsa .
Lo que pasa es que Number('') == 0
, por lo tanto, es cierto 0 == ''
1 Muy bonito - ¿sabe cómo el motor decide qué tipo de datos para convertir a? Obviamente, convertir 0 en una cadena no tendría los mismos resultados. –
Esto está mal - '' se convertirá en 0, no booleano 'falso' – Christoph
No, no estoy seguro. Sospecho que es un tipo numérico o un reparto booleano. – davethegr8