Как проверить, что поле в объекте существует?
Объекты и прототипы
Проверить наличие свойства в объекте можно оператором `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.