MDC descreve o ==
operador da seguinte maneira :
Se os dois operandos não forem do mesmo tipo, JavaScript os converte e aplica a comparação estrita. Se o operando for um número ou booleano, os operandos serão convertidos em números, se possível; else se qualquer operando for uma string, o outro operando é convertido em uma string, se possível.
Com isso em mente, eu avaliaria o "true" == true
seguinte:
- Eles são do mesmo tipo? Não
- O operando é um número ou booleano? sim
- Podemos converter ambos em um número? Não (
isNaN(Number("true")) // true
) - Qualquer um dos operandos é uma string? sim
- Podemos converter o outro operando em uma string? Sim (
String(true) === "true" // true
)
Acabei com as strings "true"
e "true"
, que deve avaliar como true
, mas o JavaScript mostra falso.
O que eu perdi?