Ja genau, weil die toString() Methode intern so umgesetzt ist.
Ja aber in JS hast du IMHO keine Chance, jedem Objekt einen unverwechselbare String als ID zuzuweisen, egal wie du toString() überschreibst.
Das hab' ich auch nie gesagt. Aber theoretisch ist das möglich:
Object.prototype.toString = function() {
if(!Object._ID_) Object._ID_ = 1;
if(!this._ID_) this._ID_ = Object._ID_++;
return 'Object #' + this._ID_;
};
und damit könnte man Objekte als Schlüssel angeben:
var o1 = {};
var o2 = {};
var x = {};
x[o1] = 'o1',
x[o2] = 'o2'
for(var a in x) alert(a);
Aber das macht keinen Sinn.
Zumal ich mittlerweile eher glaube, dass die These von Kai zutrifft und es nur um die "good parts" ging.
Meine anfänglich getroffene Aussage ist also falsch, auch deswegen, weil der Schlüssel immer in eine Zeichenkette umgewandelt wird.
Struppi.