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