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