Выбор ответа 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.

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

  1. true true true
  2. false false true
  3. true false false
  4. true false trueправильный ответ

Разбор

Оператор in ищет свойство по всей цепочке прототипов, shared найден в base: true. Object.hasOwn смотрит только собственные свойства: shared не собственное, false; own собственное, true. Object.hasOwn (ES2022) заменяет obj.hasOwnProperty(...) и работает даже для объектов без прототипа.

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

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