operadores - ¿Por qué "verdadero"== verdadero muestra falso en JavaScript?
operadores de comparacion javascript (3)
De acuerdo con 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 un booleano y otro no, boolean es el convertidor al número 0 o 1. entonces true == "true"
es falso.
MDC describe el operador ==
siguiente manera :
Si los dos operandos no son del mismo tipo, JavaScript convierte los operandos y aplica una comparación estricta. Si cualquiera de los operandos es un número o un booleano, los operandos se convierten en números si es posible; de lo contrario, si un operando es una cadena, el otro operando se convierte en una cadena si es posible.
Con esto en mente, evaluaría "true" == true
siguiente manera:
- ¿Son del mismo tipo? No
- ¿Es operand un número o un booleano? Sí
- ¿Podemos convertir ambos a un número? No (
isNaN(Number("true")) // true
) - ¿Es operando una cadena? Sí
- ¿Podemos convertir el otro operando a una cadena? Sí (
String(true) === "true" // true
)
Terminé con las cadenas "true"
y "true"
, que debería ser true
, pero JavaScript muestra falsa.
¿Qué me he perdido?
Porque "true"
se convierte a NaN
, mientras que true
se convierte a 1
. Entonces ellos difieren
Al igual que usted informó, ambos se convierten en números, porque al menos true
puede ser (ver el comentario de Erik Reppen), y luego se compara.
== operador de comparación definido en Ecma 5 como
- Si Type (x) es Number y Type (y) is String, devuelve el resultado de la comparación x == ToNumber (y).
- Si Tipo (x) es Cadena y Tipo (y) es Número,
- Si Type (x) es Boolean, devuelve el resultado de la comparación ToNumber (x) == y.
- Si Type (y) es booleano, devuelva el resultado de la comparación x == ToNumber (y).
Entonces, "verdadero" == verdadero es interpretado por el motor js como
- "verdadero" == aNúmero (verdadero)
- "verdadero" == 1
- toNumber ("true") == 1
- NaN == 1
===> falso