Какие знаешь встроенные коллекции в JavaScript?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Встроенные коллекции в JavaScript
JavaScript предоставляет несколько ключевых встроенных коллекций для хранения и управления данными. Они делятся на две основные категории: индексированные коллекции (массивы) и ключевые коллекции (объекты, Map, Set, WeakMap, WeakSet). Каждая коллекция имеет свои особенности, область применения и методы работы.
Индексированные коллекции
Array (Массив)
Это самая распространённая и универсальная коллекция. Массив хранит элементы по индексу (начинается с 0) и допускает дублирование значений.
const arr = [1, 2, 'hello', true];
// Основные методы:
arr.push(5); // Добавить элемент в конец
arr.pop(); // Удалить последний элемент
arr.includes(2); // Проверить наличие элемента
arr.map(x => x * 2); // Трансформировать каждый элемент
Массивы в JavaScript динамические, поддерживают разнородные типы данных и предоставляют богатый API для манипуляции.
Ключевые коллекции
Object (Объект)
Традиционная коллекция для хранения данных в формате ключ-значение. Ключи могут быть только строками или символами.
const obj = { name: 'Alex', age: 30 };
obj.city = 'Moscow'; // Добавить свойство
Object.keys(obj); // Получить массив ключей
Объекты идеальны для структур данных с фиксированными свойствами, но имеют ограничения: порядок свойств не гарантируется, ключи автоматически конвертируются в строки.
Map
Специализированная коллекция для пар ключ-значение, где ключи могут быть любого типа (объекты, функции, другие Map).
const map = new Map();
map.set('key', 'value');
map.set({ id: 1 }, 'object key');
map.has('key'); // true
map.get('key'); // 'value'
Map сохраняет порядок добавления элементов, предоставляет методы для прямого управления (set, get, delete, clear) и более эффективен для частых операций добавления/удаления.
Set
Коллекция для хранения уникальных значений любого типа. Не допускает дублирования.
const set = new Set([1, 2, 3, 3, 4]);
set.add(5);
set.has(3); // true
set.size; // 4 (второе значение 3 не добавлено)
Set полезен для фильтрации дублей, проверки принадлежности и математических операций над множествами (объединение, разность).
WeakMap и WeakSet
Специализированные коллекции с "weak" (слабой) ссылкой на ключи (для WeakMap) или элементы (для WeakSet). Это означает, что если объект-ключ или элемент удаляется из памяти, он автоматически удаляется из коллекции.
const weakMap = new WeakMap();
const keyObj = {};
weakMap.set(keyObj, 'private data');
// Если keyObj становится недоступен, запись удаляется из WeakMap
WeakMap часто используется для приватных данных или метаданных объектов без риска утечки памяти. WeakSet применяется для маркировки объектов (например, отслеживание посещённых узлов в графе).
Ключевые различия и выбор коллекции
- Массивы vs Set: Для упорядоченных списков используйте массивы, для уникальных значений без порядка — Set.
- Объекты vs Map: Если ключи должны быть строками и порядок не важен — объекты. Для ключей любого типа с сохранением порядка добавления — Map.
- Map/Set vs WeakMap/WeakSet: Основные коллекции хранят сильные ссылки. Для избежания утечек памяти с объектами-ключами используйте Weak-коллекции.
Каждая коллекция имеет свой прототип с методами. Например, у Map есть .entries(), .forEach(), у Set — .union() (в proposal stage). Современный JavaScript также предлагает типизированные массивы (Int8Array, Float64Array) для работы с бинарными данными и ArrayBuffer для низкоуровневых операций.
Выбор коллекции зависит от задачи: частые операции добавления/удаления — Map, уникальность — Set, индексированный доступ — Array, фиксированная структура — Object. Понимание внутренних механизмов (хеш-таблицы для Map, цепочки свойств для объектов) помогает оптимизировать производительность.