← Все вопросы

Map в JavaScript — чем отличается от обычного объекта?

Задан 31 месяц назад519 просмотров2 ответа
6

Везде пишут new Map, но я не понимаю, зачем он, если есть обычные объекты {}. Ведь объект — это тоже пары ключ-значение.

Когда стоит брать new map js вместо {}? В чём реальная разница и как с Map работать? Можно пример?

2 ответа

11
✓ Принятый ответ — помог автору

Map — это тоже хранилище пар «ключ → значение», но с важными отличиями от объекта.

Базовые операции:

const m = new Map();
m.set('name', 'Аня');
m.set('age', 20);

console.log(m.get('name'));   // 'Аня'
console.log(m.has('age'));    // true
console.log(m.size);          // 2
m.delete('age');

Главные отличия от обычного {}:

  1. Ключом может быть что угодно — не только строка, но и число, объект, даже функция:
const userKey = { id: 1 };
m.set(userKey, 'данные пользователя');
console.log(m.get(userKey));  // работает

В обычном объекте все ключи приводятся к строкам, поэтому {} так не умеет.

  1. Легко узнать размерm.size, а у объекта пришлось бы писать Object.keys(obj).length.

  2. Удобно перебирать — Map перебирается по порядку добавления:

for (const [key, value] of m) {
  console.log(key, '=', value);
}
  1. Нет лишних ключей из прототипа — у объекта можно случайно наткнуться на toString и прочее наследованное.

Когда брать Map: когда ключи не строки, когда часто добавляешь/удаляешь, когда важен порядок и нужен размер. Когда брать {}: для простой фиксированной структуры данных и когда нужен JSON (Map в JSON напрямую не сериализуется).

3

Короткое практическое правило, которое мне помогло:

  • данные как «запись о чём-то» с известными полями → объект {};
  • данные как «словарь / хеш-таблица», где ключи приходят динамически (особенно не-строки) → Map.

Плюс Map реально удобнее, когда нужно часто считать size и итерироваться — меньше возни, чем с Object.keys.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект