Hallo,
if (new Boolean(false)) { alert('foo'); }
d.h. Boolean(new Boolean(false)) ergibt true, weil new Boolean vom Typ Object ist.
Stimmt, aber sobald man einen Vergleich mit einem Primitive-Value anstellt, zeigt sich der initialisierte Wert, weil dann die ValueOf()-Methode des Objekts herangezogen wird:
if (new Boolean(false)==false) { alert('foo'); }
ergibt true, genau wie if (new Boolean(true)==true) { alert('foo'); }
Das ist definitiv einer der »Bad Parts« von JavaScript, die man unbedingt vermeiden sollte. »This turns out to be completely unnecessary and occasionally confusing. Don't use new Boolean or new Number or new String.« (Douglas Crockford, JavaScript: The Good Parts)
Ja, da hat Crockford wohl recht. Es ist sehr verwirrend und new Boolean() wird so gut wie nie wirklich gebraucht, d.h. es gibt vermutlich immer einen anderen, weniger verwirrenden Weg.
Gruß, Don P