MDC describe al ==operador de la siguiente manera :
Si los dos operandos no son del mismo tipo, JavaScript convierte los operandos y luego aplica una comparación estricta. Si alguno de los operandos es un número o un booleano, los operandos se convierten en números si es posible; de lo contrario, si alguno de los operandos es una cadena, el otro operando se convierte en una cadena si es posible.
Con esto en mente, evaluaría "true" == truelo siguiente:
- ¿Son del mismo tipo? No
- ¿Es el operando un número o un booleano? si
- ¿Podemos convertir ambos en un número? No (
isNaN(Number("true")) // true) - ¿Es alguno de los operandos una cadena? si
- ¿Podemos convertir el otro operando en una cadena? Si (
String(true) === "true" // true)
Terminé con las cadenas "true"y "true", que debería evaluar true, pero JavaScript muestra falso.
¿Qué me he perdido?
javascript
string
equals
Isaac
fuente
fuente

if("true" == true) {console.log("yes")} else {console.log("no")}; if("true") {console.log("yes")} else {console.log("no")}---> "no sí"Respuestas:
Porque
"true"se convierte enNaN, mientras quetruese convierte en1. Entonces difieren.Como informó, ambos se convierten en números, porque al menos
truese puede (ver el comentario de Erik Reppen) y luego se comparan.fuente
Can we convert both to a number?Entonces, ¿puedes decirme cuándo el paso será falso? Si parNaNes un número, ¿cómo puede fallar este paso?Number(true)yNumber('true')El
==operador de comparación se define en ECMA 5 como:devuelve el resultado de la comparación x == ToNumber (y).
devuelve el resultado de la comparación ToNumber (x) == y.
Entonces, "verdadero" == verdadero se evalúa como:
===> falso
fuente
Según el algoritmo de comparación de igualdad abstracta
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
si uno de los oprends es booleano y el otro no, boolean es convertidor al número 0 o 1. entonces
true == "true"es falso.fuente