объект JavaScript ключи могут быть только строками .Когда вы сохраняете g[a] = 'aa'
, a преобразуется в строку с использованием метода toString()
, 1 , поэтому вы на самом деле сохраняете 'aa'
в g[a.toString()]
.
В этом случае, a.toString()
равно '[object Object]'
, что равно b.toString()
.
Чтобы сделать это действительно очевидным, код в вашем вопросе эквивалентен следующему:
var g = {};
g['[object Object]'] = 'aa';
g['[object Object]'] = 'dd';
Моральистория: просто не пытайтесь использовать в качестве имен свойств ничего, кроме строк.
1 Источник: MDC: Операторы-члены JavaScript - Имена свойств