← Назад к вопросам

Что такое New Map?

2.0 Middle🔥 132 комментариев
#Другое

Комментарии (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)

КритерийMapObject ({})
КлючиЛюбого типа (объект, функция и т.д.)Только String или Symbol
Порядок элементовГарантирован (порядок вставки)Не гарантирован (хотя в современных движках часто сохраняется)
РазмерСвойство .sizeВычисляется вручную (Object.keys(obj).length)
ИтерацияПрямая (является итерируемым)Требует преобразования (например, Object.keys())
ПроизводительностьОптимизирована для частого добавления/удаленияМожет быть медленнее при динамических изменениях
НаследованиеНе содержит унаследованных ключей от прототипаМожет содержать ключи из цепочки прототипов (hasOwnProperty)

Когда использовать Map?

  • Когда ключами должны быть не-строки. Например, нужно связать метаданные с DOM-элементом или объектом.
  • Когда важен порядок элементов и его нужно гарантированно сохранить.
  • При частой динамической работе с коллекцией (добавление, удаление).
  • Когда нужен простой и быстрый способ получить размер коллекции.
  • Когда нужно избежать случайных конфликтов с унаследованными ключами из прототипа объекта.

Когда использовать обычный Object?

  • Когда ключи — это строки или символы и структура статична или известна заранее.
  • При работе с JSON, так как JSON.stringify() и JSON.parse() напрямую поддерживают объекты.
  • Когда нужны специфичные методы работы с объектами, например, доступ к прототипу.
  • В простых сценариях, где мощь Map не требуется, чтобы не усложнять код.

Итог: new Map() создает современную, мощную и предсказуемую коллекцию для пар ключ-значение. Это важный инструмент в арсенале разработчика, который следует выбирать осознанно, учитывая конкретные требования задачи, а не использовать повсеместно вместо объектов.

Что такое New Map? | PrepBro