Ya conozco el siguiente comportamiento, pero ¿alguien puede decirme POR QUÉ sucede esto? Gracias.

if("hello"==true)alert("it's true!"); //-> does not fire the alert
if("hello"==false)alert("it's true!"); //-> does not fire the alert
if("hello")alert("it's true!"); //-> fires the alert
1
Killy 1 sep. 2014 a las 17:45

3 respuestas

La mejor respuesta

En los dos primeros, está comparando explícitamente una cadena con las constantes booleanas, y la cadena obviamente no es igual a ninguna de las dos. En la tercera línea, está probando la "veracidad" de la cadena, y cualquier cadena no vacía se evalúa a true en ese contexto.

En una comparación entre una cadena y un booleano, la Comparación de igualdad de resumen El algoritmo dicta que la comparación debe llevarse a cabo como una comparación numérica . Así true se convierte a 1 y false a 0; "hello" será NaN. NaN nunca es == para nada.

4
Pointy 1 sep. 2014 a las 13:47

true y false son valores booleanos e intenta comparar el valor booleano con el valor de cadena, por lo tanto, se enfrenta al problema ya que la condición no se cumple.

En el tercer caso que no está comparando, simplemente está haciendo una comprobación de true

1
Rahul Tripathi 1 sep. 2014 a las 13:47

No puede comparar cadena ("HOLA") con booleano (verdadero). Son 2 tipos diferentes. La última alerta se dispara porque no la estás comparando con nada. Solo se devolverá si probará una cadena vacía

var foo = "Hello world!"; 
if(foo){ 
  //if foo is not empty 
}else{ 
  //if foo is empty
}
1
Luka Krajnc 1 sep. 2014 a las 13:54