Выбор ответа Middle Прототипы и классы обновлено

Объект без прототипа

Вопрос

Зачем создавать словарь через Object.create(null), а не {}?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Чтобы ключи вроде toString или proto не путались с унаследованными. У {} прототип Object.prototype, поэтому 'toString' in dict даёт true, а запись ключа proto меняет прототип вместо создания свойства.

Варианты ответа

  1. Чтобы ключи вроде toString или __proto__ не путались с унаследованнымиправильный ответ
  2. Так объект занимает вдвое меньше памяти, потому что у него нет прототипа
  3. Такой объект нельзя изменить после создания, он сразу заморожен движком
  4. Чтобы его можно было итерировать через for...of без Object.entries

Разбор

У {} прототип Object.prototype, поэтому 'toString' in dict даёт true, а запись ключа __proto__ меняет прототип вместо создания свойства. У объекта без прототипа унаследованных ключей нет, и он ведёт себя как чистый словарь. Экономия памяти не та причина, о которой стоит говорить. Неизменяемость даёт Object.freeze. for...of по такому объекту не работает, у него нет итератора. Для словарей с произвольными ключами сейчас обычно берут Map.

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

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