Как работает это код?
Вот почему:
По вашей же ссылке:Имена свойств могут быть строками. Это значит, что нестроковые объекты могут быть использованы как ключи в объекте. Любой нестроковой объект, включая числа, приводится к строке через метод toString.
...
Также выводит "value", поскольку foo и bar конвертируются в строку. В SpiderMonkey JavaScript движке эта строка будет "['object Object']".
Вы инициализировали переменные foo и bar.
Дальше, когда вы задаете свойство объекту object, то в качестве ключа берете foo. То есть:object[foo] = "value"; // foo = {unique_prop: 1}
Возможно вы хотели свойство foo, то есть вот так:object["foo"] = "value";
Но в вашем примере вы в качестве ключа используете объект, а объект принимает в качестве ключа только строки. Поэтому ваш объект преобразуется в строку и после преобразования получается вот так:object["[object Object]"] = "value";
Значит ваш object будет такой: var object = {
"[object Object]":"value"
};
И собственно, когда вы делаете console.log, то объект bar тоже преобразуется в строку и строка принимает вид:console.log(object["[object Object]"]);