Почему `(false == []) === true`?

Готовлюсь к собесу. И хочу понять почему

(false == []) === true, и в тоже время

(false == Boolean([])) === false.

Как такое явление можно объяснить?

Я понимаю, что в первом случае для массива будет вызван ToPrimitive(), а затем вроде должен отработать valueOf(). Возможно я не прав, но похоже, что этот метод вернет значение length, который равен 0, что в свою очередь является falsy значением, так что-ли?


Ответы (1 шт):

Автор решения: vsemozhebuty

Массив при нестрогом сравнении с примитивом конвертируется в пустую строку, поэтому при дальнейшем нестрогом сравнении с false и получается совпедение. Но если вы явно преобразуете объект в булево значние, возвращается true, поэтому второй результат такой.

См. подробности в https://javascript.info/array#don-t-compare-arrays-with

→ Ссылка