Возможный дубликат:
Конфликт булевых значений пустого массива JavaScript
В чем обоснование того факта, что
[ ([] == false), ([] ? 1 : 2) ]
возвращает [true, 1]?
Другими словами, пустой список логически истинен в булевом контексте, но равен false.
Я знаю, что использование === решает проблему, но каково объяснение этого, по-видимому, совершенно нелогичного выбора?
Техническое объяснение того, как это происходит, в то же время удивительно и пугает, меня больше интересовало то, что стоит за этим дизайном.
Изменить
Я принял очень подробное объяснение Ника Реталлака, даже если это касается только технических причин, почему []==false истинно: на удивление достаточно, что это происходит потому, что [], преобразованный в строку, является пустой строкой, а пустым строковым числовым значением является специальным обведенным как 0 вместо более логичного NaN. С пустым объектом, например, сравнение ({}) == false возвращает false, потому что строковое представление пустого объекта не является пустой строкой.
Мое любопытство по-прежнему остается тем, что все это просто непредвиденное (и теперь, к сожалению, затвердело в стандарте).