Ответ вслух Junior Современный синтаксис обновлено

Map против объекта

Вопрос

Когда брать Map, а когда обычный объект?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Map берут, когда ключи - не строки (объекты, числа), когда состав ключей меняется часто, когда важен порядок вставки и size. У объекта ключи приводятся к строке, и в нём всегда есть прототипные свойства - отсюда классическая ловушка с ключом constructor или proto.

Что должно прозвучать в ответе

  • ключом Map может быть что угодно, у объекта - строка или Symbol

  • Map хранит порядок вставки и знает size

  • у Map нет унаследованных ключей из прототипа

  • Map быстрее на частых добавлениях и удалениях

  • объект удобнее для JSON и для фиксированной формы записи

  • WeakMap не держит ключ от сборщика мусора

Что могут спросить следом

  • Что вернёт JSON.stringify для Map
  • Зачем нужен WeakMap в реальном коде
  • Как сделать частотный словарь и что взять

Разбор

Map берут, когда ключи - не строки (объекты, числа), когда состав ключей меняется часто, когда важен порядок вставки и size. У объекта ключи приводятся к строке, и в нём всегда есть прототипные свойства - отсюда классическая ловушка с ключом constructor или __proto__.

Объект удобнее для данных фиксированной формы и для сериализации: JSON.stringify(map) даст {}. WeakMap - отдельный случай: ключ-объект не удерживается от сборки мусора, поэтому он годится для кэша, привязанного к времени жизни объекта.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме