MDC описывает ==оператора следующим образом :
Если два операнда не одного типа, JavaScript преобразует операнды, а затем применяет строгое сравнение. Если один из операндов является числом или логическим значением, операнды по возможности преобразуются в числа; иначе, если один из операндов является строкой, другой операнд преобразуется в строку, если это возможно.
Имея это в виду, я бы оценил "true" == trueследующим образом:
- Они одного типа? Нет
- Операнд - это число или логическое значение? да
- Можем ли мы преобразовать оба значения в число? Нет (
isNaN(Number("true")) // true) - Является ли любой из операндов строкой? да
- Можем ли мы преобразовать другой операнд в строку? Да (
String(true) === "true" // true)
Я закончил со строками "true"и "true", которые должны быть оценены true, но JavaScript показывает false.
Что я пропустил?