Почему `(false == []) === true`?
Готовлюсь к собесу. И хочу понять почему
(false == []) === true, и в тоже время
(false == Boolean([])) === false.
Как такое явление можно объяснить?
Я понимаю, что в первом случае для массива будет вызван ToPrimitive(),
а затем вроде должен отработать valueOf().
Возможно я не прав, но похоже, что этот метод вернет значение length, который равен 0, что в свою очередь является falsy значением, так что-ли?
Ответы (1 шт):
Массив при нестрогом сравнении с примитивом конвертируется в пустую строку, поэтому при дальнейшем нестрогом сравнении с false и получается совпедение. Но если вы явно преобразуете объект в булево значние, возвращается true, поэтому второй результат такой.
См. подробности в https://javascript.info/array#don-t-compare-arrays-with