Javascript очевидное безумие [дубликат]

Возможное дублирование:
Конфликт логических значений пустого массива JavaScript

В чем причина того, что

<code>[ ([] == false), ([] ? 1 : 2) ]
</code>

возвраты[true, 1]?

Другими словами, пустой список логически верен в логическом контексте, но равенfalse.

Я знаю, что с помощью=== решает проблему, но чем объясняется этот, по-видимому, совершенно нелогичный выбор?

Другими словами, считается ли это ошибкой в языке, чем-то непреднамеренным, которое только что произошло, и это не может быть исправлено, потому что уже слишком поздно или действительно в дизайне языка кто-то думал, что это круто, иметь такое явное безумие, что я ' я уверен, что это сбивает с толку многих программистов?

Техническое объяснение того, как это происходит, в то же время удивительно и страшно, однако меня больше интересовало, что стоит за этим дизайном.

Редактироват

Я принял очень подробное объяснение Ника Реталлака, даже если оно касается только технических причин того, почему[]==false верно: на удивление, это происходит потому, что[], преобразованный в строку, является пустой строкой, а числовое значение пустой строки специально обрабатывается как 0 вместо явно более логичногоNaN. С пустым объектом например сравнение({}) == false возвращает false, потому что строковое представление пустого объекта не является пустой строкой.

Мое любопытство до сих пор остается о том, что все это просто непредвиденно (и теперь, к сожалению, закреплено стандартом).

Ответы на вопрос(2)

Ваш ответ на вопрос