Ответ
Нет, в обычных объектах ({}) нельзя. При попытке использовать объект как ключ, JavaScript неявно преобразует его в строку с помощью метода toString(), что для всех объектов дает "[object Object]". Это делает невозможным различение разных объектов.
Пример проблемы:
const obj1 = { id: 1 };
const obj2 = { id: 2 };
const myObject = {};
myObject[obj1] = 'Значение для obj1';
myObject[obj2] = 'Значение для obj2';
console.log(myObject); // { '[object Object]': 'Значение для obj2' }
// Оба ключа стали одной строкой, значение obj1 перезаписано.
Решение: Использовать структуру Map.
Map позволяет использовать любые значения (включая объекты, функции, другие Map) в качестве ключей, сохраняя их ссылочную уникальность.
const objKey1 = { projectId: 101 };
const objKey2 = { projectId: 102 };
const myMap = new Map();
myMap.set(objKey1, 'Конфигурация проекта A');
myMap.set(objKey2, 'Конфигурация проекта B');
console.log(myMap.get(objKey1)); // 'Конфигурация проекта A'
console.log(myMap.size); // 2
В Node.js приложениях я часто использую Map для кэширования, где ключом является сложный объект конфигурации или контекст запроса.