Коллекции: Map, Set, WeakMap, WeakSet
Map, Set, WeakMap, WeakSet — чем отличаются от объектов и массивов и когда какую брать.
Map — коллекция пар ключ-значение с ключами любого типа; Set — коллекция уникальных значений.
Map: словарь с ключами любого типа
В обычном объекте ключи — только строки и символы, а порядок и наличие лишних свойств из прототипа создают сюрпризы. Map лишён этих проблем: ключом может быть что угодно (включая объект), порядок вставки сохраняется, размер берётся через .size:
const m = new Map();
m.set("one", 1);
m.set("two", 2);
const keyObj = { id: 42 };
m.set(keyObj, "значение по объекту-ключу");
console.log("размер:", m.size);
console.log("two ->", m.get("two"));
console.log("объект ->", m.get(keyObj));
console.log("есть one?", m.has("one"));
for (const [k, v] of m) {
if (typeof k === "string") console.log(k + " = " + v);
}Вывод:
размер: 3 two -> 2 объект -> значение по объекту-ключу есть one? true one = 1 two = 2
Set: уникальные значения
Set хранит только уникальные значения — удобный способ убрать дубликаты из массива одной строкой:
const nums = [1, 2, 2, 3, 3, 3, 4];
const unique = new Set(nums);
console.log("уникальные:", [...unique].join(", "));
console.log("размер:", unique.size);
unique.add(5);
unique.delete(1);
console.log("после правок:", [...unique].join(", "));
console.log("есть 3?", unique.has(3));Вывод:
уникальные: 1, 2, 3, 4 размер: 4 после правок: 2, 3, 4, 5 есть 3? true
WeakMap и WeakSet: слабые ссылки
«Слабые» коллекции хранят ключи (только объекты) по слабой ссылке: если на объект-ключ больше никто не ссылается, сборщик мусора его удалит, а запись из WeakMap исчезнет автоматически. Поэтому они не итерируются и не имеют .size — содержимое непредсказуемо во времени.
Главные применения: приватные данные объектов (как в уроке про замыкания) и кэширование/метаданные, привязанные к объектам, без утечек памяти.
Шпаргалка по выбору
| Структура | Когда брать |
Object | фиксированный набор строковых ключей, запись/конфиг, сериализация в JSON |
Map | динамический словарь, ключи не только строки, важен порядок и .size |
Set | уникальные значения, быстрая проверка «есть ли», устранение дублей |
WeakMap | метаданные/кэш по объекту с автоочисткой; приватные поля |
WeakSet | отметить набор объектов («уже обработан») без утечки памяти |
Итог
Map— словарь с любыми ключами и сохранением порядка;Set— уникальные значения.Weak-версии держат объекты слабо, не мешают сборке мусора, не итерируются.- Объект — для конфигов и JSON; Map/Set — для динамических данных и проверок уникальности.