Back to questions
Middle+
4
Чем отличается Map от WeakMap?
Companies where asked
BetBoom
Answer from AI
sobes.tech AI
Map и WeakMap — это коллекции ключ-значение в JavaScript, но у них есть важные отличия:
-
Ключи:
- В Map ключами могут быть любые значения, включая примитивы.
- В WeakMap ключи должны быть объектами (непримитивами).
-
Сборка мусора:
- Map хранит сильные ссылки на ключи и значения, поэтому объекты, используемые в качестве ключей, не будут удалены сборщиком мусора, пока они есть в Map.
- WeakMap хранит слабые ссылки на ключи, то есть если объект-ключ больше нигде не используется, он может быть удалён сборщиком мусора, и соответствующая запись из WeakMap исчезнет автоматически.
-
Итерация:
- Map поддерживает методы для перебора (например,
map.forEach,map.keys(),map.values()). - WeakMap не поддерживает итерацию, так как его содержимое может изменяться сборщиком мусора в любой момент.
- Map поддерживает методы для перебора (например,
Пример использования Map и WeakMap:
const map = new Map();
const weakMap = new WeakMap();
const objKey = { id: 1 };
map.set(objKey, 'value in Map');
weakMap.set(objKey, 'value in WeakMap');
console.log(map.get(objKey)); // 'value in Map'
console.log(weakMap.get(objKey)); // 'value in WeakMap'
// Если objKey больше не используется, в WeakMap запись может быть удалена автоматически.
WeakMap полезен для хранения данных, связанных с объектами, без риска утечки памяти.