Ответ
В JavaScript есть несколько методов, различающихся по смыслу и надёжности.
1. Оператор in
Проверяет наличие свойства в самом объекте или в его цепочке прототипов.
const obj = { name: 'Alice' };
console.log('name' in obj); // true
console.log('toString' in obj); // true (унаследовано от Object.prototype)
2. Метод Object.hasOwn() (ES2022) или obj.hasOwnProperty()
Проверяет только собственные (не унаследованные) свойства объекта.
const obj = { name: 'Alice' };
console.log(Object.hasOwn(obj, 'name')); // true (рекомендуемый современный способ)
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('toString')); // false
3. Сравнение с undefined (с осторожностью)
Может не сработать, если свойство существует, но его значение явно установлено в undefined.
const obj = { name: undefined };
console.log(obj.name !== undefined); // false, хотя свойство существует!
4. Опциональная цепочка (?.) с последующей проверкой
Удобный и безопасный способ для глубоко вложенных свойств.
const user = { profile: { name: 'Bob' } };
if (user?.profile?.name !== undefined) {
// Свойство существует и не равно undefined
}
Для других структур:
Map: Используйте метод.has(key).Set: Используйте метод.has(value).Array: Для индексов используйтеindex in arrayили сравнениеindex < array.length.