Sobes.tech
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 и 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 полезен для хранения данных, связанных с объектами, без риска утечки памяти.