Sobes.tech
Назад к вопросам
Middle+
1

В чём разница между Map и WeakMap?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

Основные отличия между Map и WeakMap:

  • Ключи:

    • Map может использовать в качестве ключей любые значения (примитивы и объекты).
    • WeakMap принимает только объекты в качестве ключей.
  • Сборка мусора:

    • В Map ключи и значения удерживаются сильными ссылками, поэтому объекты не удаляются из памяти, пока есть ссылка в Map.
    • В WeakMap ключи удерживаются слабыми ссылками, то есть если объект-ключ больше нигде не используется, он может быть удалён сборщиком мусора вместе с соответствующим значением.
  • Перебор:

    • Map поддерживает перебор элементов (методы forEach, keys, values и т.д.).
    • WeakMap не поддерживает перебор, так как ключи могут исчезать в любой момент.
  • Использование:

    • Map подходит, когда нужно хранить пары ключ-значение с любыми типами ключей и иметь возможность перебора.
    • WeakMap полезен для хранения данных, связанных с объектами, без предотвращения их удаления из памяти (например, для приватных данных объектов).

Пример использования WeakMap для хранения приватных данных:

const privateData = new WeakMap();

class User {
  constructor(name) {
    privateData.set(this, { name });
  }
  getName() {
    return privateData.get(this).name;
  }
}

Здесь данные пользователя не доступны извне и автоматически удаляются при удалении объекта User.