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