Usando un objeto como clave de propiedad en JavaScript

¿Qué está pasando en este código?

var a = {a:1};
var b = {b:2};
var c = {};

c[a] = 1;
c[b] === 1 // true!

c[b] = 2;
c[a] === 2 // true!

Específicamente, ¿por qué usar mirando hacia arriba?b enc Devuelve el valor que estaba almacenado en una propiedad dea?

¿Qué significa usar un objeto como clave para una propiedad en JavaScript?

He probado esto en Chrome / Node y en Firefox.

Respuestas a la pregunta(2)

Su respuesta a la pregunta