Выбор ответа Junior Прототипы и классы обновлено
Object.hasOwn против оператора in
Вопрос
Что выведет код?
const base = { shared: 1 };
const obj = Object.create(base);
obj.own = 2;
console.log('shared' in obj, Object.hasOwn(obj, 'shared'), Object.hasOwn(obj, 'own'));
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: true false true. Оператор in ищет свойство по всей цепочке прототипов, shared найден в base: true.
Варианты ответа
true true truefalse false truetrue false falsetrue false trueправильный ответ
Разбор
Оператор in ищет свойство по всей цепочке прототипов, shared найден в base: true. Object.hasOwn смотрит только собственные свойства: shared не собственное, false; own собственное, true. Object.hasOwn (ES2022) заменяет obj.hasOwnProperty(...) и работает даже для объектов без прототипа.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.