Что выведет код Senior Прототипы и классы обновлено

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

Вопрос

Что выведет код? По строке на каждый вывод.

const o1 = {};
console.log(o1.toString());

const o2 = Object.create(null);
try { console.log(o2.toString()); } catch (e) { console.log(e.constructor.name); }
console.log(Object.prototype.toString.call(o2));

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: [object Object], TypeError, [object Object]. Почему так Object.create(null) создаёт объект без прототипа: у него нет ни toString, ни hasOwnProperty, ни valueOf.

Что выведет

[object Object]
TypeError
[object Object]

Разбор

Почему так

Object.create(null) создаёт объект без прототипа: у него нет ни toString, ни hasOwnProperty, ни valueOf. Такой объект используют как чистый словарь - в него нельзя случайно попасть ключом вроде 'constructor' или 'proto'. Вызвать метод всё равно можно, но только явно через Object.prototype.method.call.

Вывод

[object Object]
TypeError
[object Object]

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

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