MDC opisuje ==
operatora w następujący sposób :
Jeśli dwa operandy nie są tego samego typu, JavaScript konwertuje operandy, a następnie stosuje ścisłe porównanie. Jeśli którykolwiek z operandów jest liczbą lub wartością logiczną, operandy są konwertowane na liczby, jeśli to możliwe; w przeciwnym razie, jeśli którykolwiek operand jest łańcuchem, drugi operand jest konwertowany na łańcuch, jeśli to możliwe.
Mając to na uwadze, oceniłbym "true" == true
następująco:
- Czy są tego samego typu? Nie
- Czy operand jest liczbą czy wartością logiczną? tak
- Czy możemy zamienić oba na liczbę? Nie (
isNaN(Number("true")) // true
) - Czy któryś z operandów jest łańcuchem? tak
- Czy możemy zamienić inny operand na łańcuch? Tak (
String(true) === "true" // true
)
Skończyło się na ciągach "true"
i "true"
, co powinno dać wynik true
, ale JavaScript pokazuje fałsz.
Co przegapiłem?