PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

Как проверить, что поле в объекте существует?

Объекты и прототипы

Проверить наличие свойства в объекте можно оператором `in`, методом `hasOwnProperty`, сравнением с `undefined` или опциональной цепочкой. Способы различаются по учёту прототипа.

Способы

Оператор in

Проверяет наличие свойства, включая унаследованное из прототипа:

'name' in user;        // true, если есть у объекта или в прототипе
'toString' in user;    // true — из прототипа

hasOwnProperty / Object.hasOwn

Только собственные свойства (без прототипа):

user.hasOwnProperty('name');   // true
Object.hasOwn(user, 'name');   // современный, безопаснее

Сравнение с undefined

user.name !== undefined; // но даст false и когда name = undefined

Ненадёжно, если значение свойства само undefined.

Опциональная цепочка

if (user?.address?.city) { /* ... */ }

Удобно для вложенных, но проверяет truthy, а не наличие.

Как выбирать

  • Наличие своего свойства → Object.hasOwn (или hasOwnProperty).
  • Наличие с учётом прототипа → in.
  • Вложенный доступ → опциональная цепочка.

Коротко для собеседования

Наличие свойства: in (включая прототип), Object.hasOwn/hasOwnProperty (только собственные), сравнение с undefined (ненадёжно, если значение — undefined), опциональная цепочка ?. для вложенных. Для проверки собственного свойства лучше Object.hasOwn.

Другие вопросы раздела