
Что выведет этот код?
console.log([] == ![])
Правильный ответ: true
Пошаговый разбор (как это видит движок JS):
![] — массив в JS является объектом, а все объекты в логическом контексте это true (truthy). Значит, ![] превращается в false.
Получаем выражение: [] == false
[] == false — согласно алгоритму нестрогого сравнения (Abstract Equality Comparison), если один из операндов — булево значение, оно приводится к числу. false становится 0.
Получаем выражение: [] == 0
[] == 0 — если сравнивается объект (массив) с числом, объект приводится к примитиву. Метод toString() для пустого массива возвращает пустую строку «».
Получаем выражение: «» == 0
«» == 0 — если сравнивается строка с числом, строка приводится к числу. Пустая строка при конвертации в число дает 0.
Получаем выражение: 0 == 0
0 == 0 — банально, но факт: true.
