Set, Map, WeakSet и WeakMap в JavaScript
JavaScript предоставляет встроенные структуры данных, которые делают работу с коллекциями более удобной и эффективной. Рассмотрим Set, Map, WeakSet и WeakMap.
Set
Set — это коллекция уникальных значений, где каждое значение может появляться только один раз.
Особенности set
- Хранит только уникальные значения.
- Значения могут быть любого типа.
- Неупорядоченная структура.
Основные методы set
add(value)
— добавляет значение.delete(value)
— удаляет значение.has(value)
— проверяет наличие значения.clear()
— очищает коллекцию.size
— возвращает количество элементов.
Пример использования set
const set = new Set();
set.add(1);
set.add(2);
set.add(2); // Игнорируется, так как 2 уже есть в коллекции
console.log(set.has(1)); // true
console.log(set.size); // 2
set.delete(1);
console.log(set); // Set { 2 }
Map
Map — это коллекция пар ключ-значение, где ключи могут быть любого типа.
Особенности map
- Упорядоченная структура.
- Позволяет использовать объекты в качестве ключей.
Основные методы map
set(key, value)
— добавляет пару ключ-значение.get(key)
— возвращает значение по ключу.delete(key)
— удаляет пару по ключу.has(key)
— проверяет наличие ключа.clear()
— очищает коллекцию.size
— возвращает количество элементов.
Пример использования map
const map = new Map();
map.set('name', 'Иван');
map.set({ id: 1 }, 'Объект');
console.log(map.get('name')); // Иван
console.log(map.size); // 2
map.delete('name');
console.log(map); // Map { { id: 1 } => 'Объект' }
WeakSet
WeakSet — это коллекция, в которой хранятся только объекты. Эти объекты являются слабо-ссылаемыми, что позволяет сборщику мусора удалять их, если на них нет других ссылок.
Особенности weakset
- Хранит только объекты.
- Нельзя получить размер или перебрать элементы.
- Используется для временного хранения объектов.
Основные методы weakset
add(value)
— добавляет объект.delete(value)
— удаляет объект.has(value)
— проверяет наличие объекта.
Пример использования weakset
const weakSet = new WeakSet();
let obj = { name: 'Иван' };
weakSet.add(obj);
console.log(weakSet.has(obj)); // true
obj = null; // Объект удалится из WeakSet сборщиком мусора
WeakMap
WeakMap — это коллекция пар ключ-значение, где ключами могут быть только объекты, а значения могут быть любыми. Ключи являются слабо-ссылаемыми, что позволяет сборщику мусора удалять объекты, если на них больше нет ссылок.
Особенности weakmap
- Ключами могут быть только объекты.
- Значения могут быть любыми.
- Элементы слабо-ссылаемы, что означает автоматическое удаление из коллекции, если ключ недостижим.
- Нельзя перебрать элементы коллекции или получить её размер.
Основные методы weakmap
set(key, value)
— добавляет пару ключ-значение.get(key)
— возвращает значение по ключу.delete(key)
— удаляет пару ключ-значение.has(key)
— проверяет наличие ключа.
Пример использования weakmap
const weakMap = new WeakMap();
// Создаём объект
let user = { name: "Иван" };
// Добавляем объект как ключ и значение
weakMap.set(user, "Данные о пользователе");
console.log(weakMap.get(user)); // "Данные о пользователе"
// Удаляем ссылку на объект
user = null;
// Объект удалится из WeakMap сборщиком мусора
Ограничения WeakMap:
WeakMap подходит для хранения данных, связанных с объектами, которые могут быть удалены сборщиком мусора. Например, для привязки метаданных к объектам DOM.