Javascript offensichtlicher Wahnsinn [duplizieren]

Mögliche Duplikate:
Widersprüchliche boolesche Werte eines leeren JavaScript-Arrays

Was ist der Grund für die Tatsache, dass

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

kehrt zurück[true, 1]?

Mit anderen Worten, eine leere Liste ist in einem booleschen Kontext logisch wahr, aber gleichfalse.

Ich kenne das mit=== löst das Problem, aber was ist die Erklärung für diese anscheinend völlig unlogische Entscheidung?

Mit anderen Worten, dies wird als ein Fehler in der Sprache angesehen, etwas Unbeabsichtigtes, das gerade passiert ist und das nicht behoben werden kann, weil es zu spät ist oder wirklich im Design der Sprache jemand dachte, es wäre cool, diese Art von offensichtlichem Wahnsinn zu haben, den ich bin sicher ist das für viele programmierer ziemlich verwirrend?

Die technische Erklärung, wie dies geschieht, ist gleichzeitig erstaunlich und beängstigend. Ich war jedoch mehr daran interessiert, was sich hinter diesem Design verbirgt.

Bearbeiten

Ich habe die sehr detaillierte Erklärung von Nick Retallack akzeptiert, auch wenn es nur um die technischen Gründe dafür geht[]==false ist wahr: überraschenderweise passiert es, weil[] konvertiert in Zeichenfolge ist eine leere Zeichenfolge, und der numerische Wert der leeren Zeichenfolge wird als Sonderfall 0 anstelle des anscheinend logischeren Werts angegebenNaN. Bei einem leeren Objekt zum Beispiel der Vergleich({}) == false gibt false zurück, da die Zeichenfolgendarstellung eines leeren Objekts keine leere Zeichenfolge ist.

Meine Neugier bleibt immer noch, dass all dies nur unerwartet ist (und sich jetzt leider in einem Standard verfestigt).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage