У объектов ключами могут быть только строки => при использовании другого объекта в качестве ключа, он будет преобразован в строку.
В результате преобразования объекта в строку, ключом someObject будет "[object Object]"
const a = {
foo: 'bar'
};
const b = {
bar: 'baz'
};
const someObject = {
[a]: 1, // т.к. a - объект, у него вызовется метод Object.prototype.toString() и ключом станет "[object Object]"
[b]: 2, // аналогично ключом будет "[object Object]"
}
// Т.к. a - объект, то он преобразуется в строку и получаем значение
// someObject["[object Object]"] = 2
console.log(someObject[a]) // 2
В итоге, вначале устанавливаем someObject["[object Object]"] = 1, а потом изменяем его на someObject["[object Object]"] = 2
Также есть струтура данных
Map, ключами которой могут быть не только строки.