Комментарии (2)
🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое new Map() в JavaScript?
new Map() — это конструктор для создания коллекций типа Map (Карта) в JavaScript. Это встроенный объект, появившийся в стандарте ES6 (ECMAScript 2015), который предоставляет структуру данных для хранения пар ключ-значение с улучшенными возможностями по сравнению с обычными объектами ({}).
Ключевые особенности Map
- Любые типы данных в качестве ключей. В отличие от объектов, где ключами могут быть только строки или символы, в Map ключом может быть любой тип: объект, функция, число, строка, массив и даже другой Map.
- Сохранение порядка вставки. Map перебирает элементы в том порядке, в котором они были добавлены, что гарантировано спецификацией.
- Удобные методы для работы. Предоставляет встроенные методы для управления коллекцией:
.set(),.get(),.has(),.delete(),.clear(). - Простое получение размера. Размер коллекции легко получить через свойство
.size, тогда как для объекта нужно вручную вычислять количество ключей. - Прямая итерация. Map является итерируемым объектом, его можно перебирать напрямую с помощью
for...ofили методов.forEach(),.keys(),.values(),.entries(). - Более высокая производительность при частом добавлении/удалении. Операции добавления и удаления элементов в больших коллекциях часто выполняются быстрее, чем в объектах.
Создание и базовое использование
// Создание новой пустой карты
const myMap = new Map();
// Добавление элементов с помощью метода .set(key, value)
myMap.set('name', 'Алексей');
myMap.set(42, 'Ответ на главный вопрос');
myMap.set({ id: 1 }, 'Значение, связанное с объектом');
myMap.set(function() {}, 'Даже функция может быть ключом!');
// Получение значения по ключу с помощью .get(key)
console.log(myMap.get('name')); // 'Алексей'
console.log(myMap.get(42)); // 'Ответ на главный вопрос'
// Проверка наличия ключа с помощью .has(key)
console.log(myMap.has('name')); // true
console.log(myMap.has('age')); // false
// Удаление элемента по ключу с помощью .delete(key)
myMap.delete(42);
console.log(myMap.has(42)); // false
// Получение количества элементов
console.log(myMap.size); // 3
// Очистка всей карты
myMap.clear();
console.log(myMap.size); // 0
Итерация по Map
const userMap = new Map([
['id', 12345],
['name', 'Мария'],
['isActive', true]
]);
// 1. Через for...of (получаем пары [ключ, значение])
for (let [key, value] of userMap) {
console.log(`${key}: ${value}`);
}
// Вывод:
// id: 12345
// name: Мария
// isActive: true
// 2. Используя встроенный метод .forEach()
userMap.forEach((value, key) => {
console.log(`Ключ "${key}" -> Значение "${value}"`);
});
// 3. Получение итераторов для ключей, значений или записей
const keys = userMap.keys(); // Итератор по ключам
const values = userMap.values(); // Итератор по значениям
const entries = userMap.entries(); // Итератор по парам [ключ, значение]
Сравнение с обычным Объектом (Object)
| Критерий | Map | Object ({}) |
|---|---|---|
| Ключи | Любого типа (объект, функция и т.д.) | Только String или Symbol |
| Порядок элементов | Гарантирован (порядок вставки) | Не гарантирован (хотя в современных движках часто сохраняется) |
| Размер | Свойство .size | Вычисляется вручную (Object.keys(obj).length) |
| Итерация | Прямая (является итерируемым) | Требует преобразования (например, Object.keys()) |
| Производительность | Оптимизирована для частого добавления/удаления | Может быть медленнее при динамических изменениях |
| Наследование | Не содержит унаследованных ключей от прототипа | Может содержать ключи из цепочки прототипов (hasOwnProperty) |
Когда использовать Map?
- Когда ключами должны быть не-строки. Например, нужно связать метаданные с DOM-элементом или объектом.
- Когда важен порядок элементов и его нужно гарантированно сохранить.
- При частой динамической работе с коллекцией (добавление, удаление).
- Когда нужен простой и быстрый способ получить размер коллекции.
- Когда нужно избежать случайных конфликтов с унаследованными ключами из прототипа объекта.
Когда использовать обычный Object?
- Когда ключи — это строки или символы и структура статична или известна заранее.
- При работе с JSON, так как
JSON.stringify()иJSON.parse()напрямую поддерживают объекты. - Когда нужны специфичные методы работы с объектами, например, доступ к прототипу.
- В простых сценариях, где мощь Map не требуется, чтобы не усложнять код.
Итог: new Map() создает современную, мощную и предсказуемую коллекцию для пар ключ-значение. Это важный инструмент в арсенале разработчика, который следует выбирать осознанно, учитывая конкретные требования задачи, а не использовать повсеместно вместо объектов.