Назад к вопросам
IT One
Middle+
1
В чём разница между Map и WeakMap?
Компании, где спрашивали
Ответ от нейросети
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.