Чему равно выражение [] == ![] и почему?
Уровень: Senior
Ответ
Выражение `[] == ![]` оценивается как true. Разберём по шагам: `![]` – логическое НЕ, при приведении массива [] к boolean он считается true (непустой объект -> true), а !true даёт false. Теперь сравнение: [] == false. При нестрогом сравнении, если один операнд boolean (false), он приводится к числу: false -> 0. Сравнение становится [] == 0. Далее массив [] приводится к примитиву: для массива valueOf возвращает сам массив, toString возвращает пустую строку `\"\"`. Пустая строка при нестрогом сравнении с числом приводится к числу 0. Получается 0 == 0, что истинно. Поэтому результат true. Этот пример демонстрирует, как неочевидно работает абстрактное сравнение с приведением типов.