Как JavaScript выполняет нестрогое сравнение (==) разных типов?
Уровень: Senior
Ответ
При использовании оператора `==` (нестрогое равенство) если типы операндов различаются, JS приводит их к одному типу по определённым правилам перед сравнением. Основные правила: при сравнении строки и числа – строка приводится к числу (`"5" == 5` -> 5 == 5 -> true); boolean сравнивается, предварительно приводясь к числу (true -> 1, false -> 0); null и undefined при сравнении друг с другом считаются равными, но ни к чему другому не приводятся (null == undefined -> true, но null != 0); объект при сравнении с примитивом преобразуется в примитив через метод valueOf или toString (например, `[1] == "1"` -> "1" == "1" -> true, потому что массив [1] приводится к "1"). Эти правила довольно сложные, поэтому для предсказуемости часто предпочитают использовать === и явные преобразования.