Объект без прототипа
Вопрос
Зачем создавать словарь через Object.create(null), а не {}?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Чтобы ключи вроде
toStringили__proto__не путались с унаследованнымиправильный ответ - Так объект занимает вдвое меньше памяти, потому что у него нет прототипа
- Такой объект нельзя изменить после создания, он сразу заморожен движком
- Чтобы его можно было итерировать через
for...ofбезObject.entries
Разбор
У {} прототип Object.prototype, поэтому 'toString' in dict даёт true, а запись ключа __proto__ меняет прототип вместо создания свойства. У объекта без прототипа унаследованных ключей нет, и он ведёт себя как чистый словарь. Экономия памяти не та причина, о которой стоит говорить. Неизменяемость даёт Object.freeze. for...of по такому объекту не работает, у него нет итератора. Для словарей с произвольными ключами сейчас обычно берут Map.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Конструктор возвращает объект
Следующий вопрос
Поле наследника во время конструктора родителя