Verwenden eines Objekts als Eigenschaftstaste in JavaScript

Was ist los in diesem Code?

var a = {a:1}; var b = {b:2}; var c = {}; c[a] = 1; c[b] === 1 // true! c[b] = 2; c[a] === 2 // true! 

Speziell, warum mit dem Nachschlagen b in c den Wert zurückgeben, der in einer Eigenschaft von a gespeichert wurde?

Was bedeutet es, ein Objekt als Schlüssel für eine Eigenschaft in JavaScript zu verwenden?

Ich habe das in Chrome / Node und in Firefox getestet.

2 Solutions collect form web for “Verwenden eines Objekts als Eigenschaftstaste in JavaScript”

Was bedeutet es, ein Objekt als Schlüssel für eine Eigenschaft in JavaScript zu verwenden?

Javascript-Objekte erlauben nur String-Schlüssel, so dass Ihr Objekt zuerst zu einem String gezwungen wird.

Speziell, warum mit dem Nachschlagen b in c den Wert zurückgeben, der in einer Eigenschaft von einem gespeichert wurde?

Die Stringdarstellung von {a: 1} und {b: 2} sind beide "[object Object]" , also wird die Eigenschaft überschrieben.

Bearbeiten: Wenn Sie wirklich brauchen, um Objekte als Schlüssel zu verwenden (ich würde lieber eine andere Lösung, wenn möglich), könnten Sie die JSON-Darstellung des Objekts verwenden:

 c[JSON.stringify(a)] = 1 c[JSON.stringify(b)] = 2 

Aber versuche noch einmal einen anderen Ansatz zu denken. Vielleicht haben die Objekte eindeutige Bezeichner außer dem Objekt selbst.

Warum Sie ein Objekt als Schlüssel verwenden, wird der Schlüssel zum Objekt des object.toString() , das [Object Object] object.toString() [Object Object] ,

Also, was du bist, ist ein Wert auf die Eigenschaft "[Object Object]" Objektobjekt "[Object Object]" und den Wert durch die Eigenschaft "[Object Object]" .

Lassen Sie uns Javascript Schönheit und nützlich machen.