if (true != “true”) //retorna false (AQUI LA DIFERENCIA ES PORQUE TIENE " "???) if (true !== “true”) //retorna true ( EN ESTE CASO DEL NO IDENTICO TAMBIEN SE GENERA POR LAS " "??)
Quedo pendiente de sus aportes.
Gracias!
if (true != “true”) //retorna false (AQUI LA DIFERENCIA ES PORQUE TIENE " "???) if (true !== “true”) //retorna true ( EN ESTE CASO DEL NO IDENTICO TAMBIEN SE GENERA POR LAS " "??)
Quedo pendiente de sus aportes.
Gracias!
De acuerdo a la documentación, cuando se realiza una comparación entre dos operandos sucederá que,
En la mayoría de los casos, si los dos operandos no son del mismo tipo, JavaScript intenta convertirlos a un tipo apropiado para la comparación. Este comportamiento generalmente resulta en comparar los operandos numéricamente. Las únicas excepciones a la conversión de tipos dentro de las comparaciones involucran a los operadores === y !==, que realizan comparaciones estrictas de igualdad y desigualdad.
Lo que básicamente quiere decir que cuando ambos operandos no sean del mismo tipo, JavaScript intentará convertir uno o ambos operandos a un tipo en común, que normalmente será un equivalente numérico.
De este modo, en tu primer ejemplo JavaScript intentará convertir ambos operandos puesto que no son operandos con un tipo en común, uno es boolean y el otro string. Entonces el valor true
se transformará a 1
en su equivalente numérico y el valor "true"
pasará a ser NaN
. Sé que puede causar un poco de confusión la inclusión de estos nuevos conceptos, pero me imagino que eventualmente se verán a lo largo del curso, así que no te preocupes. Volviendo al problema, el resultado de la evaluación será 1 != NaN
, y esto resultará en true
ya que 1
sí es distinto de NaN
.
En el segundo caso, JS hará una evaluación "estricta" como lo menciona la documentación, por lo que aparte de evaluar el valor, también se evaluará el tipo de los operandos. Puesto que un boolean es distinto de un string, la evaluación retornará true
por esta sencilla razón.
En general siempre es recomendable usar el doble igual (!==
) o triple igual (===
) para evitar este tipo de problemas.