MDC описує ==
оператора наступним чином :
Якщо два операнди не одного типу, JavaScript перетворює операнди, тоді застосовується суворе порівняння. Якщо будь-який операнд є числом або булевим значенням, операнди перетворюються в числа, якщо це можливо; в іншому випадку, якщо будь-який операнд є рядком, інший операнд перетворюється у рядок, якщо це можливо.
З огляду на це, я б оцінив "true" == true
наступне:
- Вони однотипні? Немає
- Чи операнд - це число, або логічне значення? Так
- Чи можемо ми перетворити обидва на число? Ні (
isNaN(Number("true")) // true
) - Чи є операнд рядком? Так
- Чи можемо ми перетворити інший операнд у рядок? Так (
String(true) === "true" // true
)
Я закінчив із рядками "true"
і "true"
, які повинні оцінювати true
, але JavaScript показує false.
Що я пропустив?