What is going on in this 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!
Specifically, why does using looking up b in c return the value that was stored in a property of a?
What does it mean to use an object as a key to a property in JavaScript?
I’ve tested this in Chrome/Node and in Firefox.
Javascript objects only allow string keys, so your object will first be coerced to a string.
The string representation of
{a: 1}and{b: 2}are both"[object Object]", thus, the property is overwritten.Edit: If you really need to use objects as keys (I would prefer another solution, if possible), you could use the object’s JSON representation:
But, again, try to think of a different approach. Perhaps the objects have unique identifiers other than the object itself.