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