Widoczne szaleństwo JavaScript [duplikat]

Możliwy duplikat:
Sprzeczne wartości logiczne pustej tablicy JavaScript

Jakie jest uzasadnienie tego faktu

[ ([] == false), ([] ? 1 : 2) ]

zwraca[true, 1]?

Innymi słowy pusta lista jest logicznie prawdziwa w kontekście boolowskim, ale jest równafalse.

Wiem to używając=== rozwiązuje problem, ale jakie jest wyjaśnienie tego pozornie całkowicie nielogicznego wyboru?

Innymi słowy, jest to uważane za błąd w języku, coś niezamierzonego, które właśnie się wydarzyło i którego nie można naprawić, ponieważ jest zbyt późno lub naprawdę w projektowaniu języka, ktoś pomyślał, że fajnie jest mieć tego rodzaju pozorne szaleństwo, które jestem na pewno jest mylące dla wielu programistów?

Techniczne wyjaśnienie, jak to się dzieje, jest jednocześnie niesamowite i przerażające, jednak bardziej interesowało mnie to, co kryje się za tym projektem.

Edytować

Przyjąłem bardzo szczegółowe wyjaśnienie Nicka Retallacka, nawet jeśli chodzi tylko o przyczyny techniczne[]==false jest prawdą: co zaskakujące, dzieje się tak, ponieważ[] konwertowane na łańcuch znaków jest pustym łańcuchem, a wartość liczbowa pustego łańcucha jest specjalnym przypadkiem na 0 zamiast na pozornie bardziej logicznymNaN. Z pustym obiektem na przykład porównanie({}) == false zwraca false, ponieważ reprezentacja łańcucha pustego obiektu nie jest pustym łańcuchem.

Moja ciekawość wciąż polega na tym, że wszystko to jest nieoczekiwane (a teraz niestety umocnione w standardzie).