Aber hinter einem einfachem true/false steht auch ein Boolean-Objekt.
Erst in einem Kontext, der ein Objekt verlangt, werden sie in Objekte umgewandelt. Z.B. beim Property-Accessor-Operator.
Wichtig ist, dass diese Umwandlung nicht den ursprünglichen Primitive ändert und man üblicherweise keine Referenz auf das erzeugte Objekt erhält.
var bool = false;
bool.member = "wtf";
alert(bool.member); // undefined
Dieses Verhalten lässt sich nicht erklären, wenn man nicht zwischen Primitives und Objects unterscheidet und alles als Object ansieht.
Was hier passiert ist:
Object(bool).member = "wtf";
alert(Object(bool).member); // undefined
Bei diesen beiden Umwandlungen in ein Object kommt ein anderes Objekt heraus. Das erste wird erweitert, dann aber weggeworfen.
Mathias