В чем разница между Map, Set, WeakMap, WeakSet
1️⃣ Как кратко ответить
Map — это коллекция пар ключ-значение, где ключи могут быть любого типа. Set — это коллекция уникальных значений любого типа. WeakMap — это коллекция пар ключ-значение, где ключи должны быть объектами, и они могут быть удалены сборщиком мусора, если больше нигде не используются. WeakSet — это коллекция уникальных объектов, которые также могут быть удалены сборщиком мусора, если больше нигде не используются.
2️⃣ Подробное объяснение темы
Map, Set, WeakMap и WeakSet — это структуры данных, которые предоставляют различные способы хранения и управления коллекциями данных в JavaScript.
Map
Map — это коллекция, которая хранит пары ключ-значение. В отличие от обычных объектов, ключи в Map могут быть любого типа, включая объекты, функции и примитивы.
const map = new Map();
map.set('key1', 'value1'); // Устанавливаем строку в качестве ключа
map.set({}, 'value2'); // Устанавливаем объект в качестве ключа
map.set(() => {}, 'value3'); // Устанавливаем функцию в качестве ключа
console.log(map.get('key1')); // 'value1'
set(key, value): добавляет пару ключ-значение.get(key): возвращает значение, связанное с ключом.delete(key): удаляет пару по ключу.has(key): проверяет наличие ключа.size: возвращает количество элементов.
Set
Set — это коллекция уникальных значений. Значения могут быть любого типа, но каждое значение может присутствовать только один раз.
const set = new Set();
set.add(1); // Добавляем число
set.add('text'); // Добавляем строку
set.add(1); // Игнорируется, так как 1 уже есть в Set
console.log(set.has(1)); // true
console.log(set.size); // 2
add(value): добавляет значение.delete(value): удаляет значение.has(value): проверяет наличие значения.size: возвращает количество элементов.
WeakMap
WeakMap похож на Map, но ключи должны быть объектами, и они могут быть удалены сборщиком мусора, если больше нигде не используются. Это полезно для хранения данных, связанных с объектами, без предотвращения их удаления.
let obj = {};
const weakMap = new WeakMap();
weakMap.set(obj, 'value');
console.log(weakMap.get(obj)); // 'value'
obj = null; // Теперь объект может быть удален сборщиком мусора
set(key, value): добавляет пару ключ-значение.get(key): возвращает значение, связанное с ключом.delete(key): удаляет пару по ключу.has(key): проверяет наличие ключа.
WeakSet
WeakSet — это коллекция уникальных объектов. Как и в WeakMap, объекты могут быть удалены сборщиком мусора, если больше нигде не используются.
let obj1 = {};
let obj2 = {};
const weakSet = new WeakSet();
weakSet.add(obj1);
weakSet.add(obj2);
console.log(weakSet.has(obj1)); // true
obj1 = null; // Теперь obj1 может быть удален сборщиком мусора
add(value): добавляет объект.delete(value): удаляет объект.has(value): проверяет наличие объекта.
Применение и особенности
- Map и Set полезны, когда требуется работа с коллекциями данных, где важны типы ключей или уникальность значений.
- WeakMap и WeakSet полезны для управления памятью, когда необходимо хранить данные, связанные с объектами, без предотвращения их удаления сборщиком мусора. Это особенно актуально в случаях, когда объекты могут быть временными и не должны удерживаться в памяти дольше, чем необходимо.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться