Перевірка наявності властивості в об'єкті
1. Оператор in - найуніверсальніший спосіб
javascript
const user = { name: 'Alice', age: 25 };
console.log('age' in user); // true
console.log('city' in user); // falseПеревіряє, чи є ключ в об'єкті (включно з властивостями, успадкованими від прототипу).
Приклад із успадкуванням:
javascript
const person = { species: 'human' };
const user = Object.create(person);
user.name = 'Alice';
console.log('species' in user); // true (успадковано)2. Метод hasOwnProperty() - перевіряє лише "власні" властивості
javascript
const user = { name: 'Alice', age: 25 };
console.log(user.hasOwnProperty('age')); // true
console.log(user.hasOwnProperty('city')); // falseНа відміну від in, ігнорує прототип
і перевіряє лише ті властивості, які реально задані в об'єкті.
Приклад відмінності:
javascript
const person = { species: 'human' };
const user = Object.create(person);
user.name = 'Alice';
console.log('species' in user); // true
console.log(user.hasOwnProperty('species')); // false3. Перевірка на undefined (найпростіший, але не завжди точний)
javascript
const user = { name: 'Alice' };
if (user.age !== undefined) {
console.log('Є властивість age');
} else {
console.log('Немає властивості age');
}Мінус: якщо властивість є, але її значення undefined,
ти отримаєш хибний результат.
javascript
const user = { age: undefined };
console.log(user.age !== undefined); // false - хоча ключ існує!4. Object.hasOwn() (сучасний аналог hasOwnProperty)
ES2022 додав безпечніший і читабельніший спосіб:
javascript
const user = { name: 'Alice' };
console.log(Object.hasOwn(user, 'name')); // true
console.log(Object.hasOwn(user, 'city')); // falseПрацює так само, як hasOwnProperty,
але не залежить від можливих перевизначень всередині об'єкта.
Підсумок
| Спосіб | Перевіряє | Враховує прототип | Надійність |
|---|---|---|---|
'key' in obj | наявність властивості | Так | Відмінний вибір |
obj.hasOwnProperty('key') | лише "власні" властивості | Ні | Класика |
Object.hasOwn(obj, 'key') | лише "власні" властивості | Ні | Сучасний стандарт |
obj.key !== undefined | значення не undefined | Ні | Може бути хибним |
В одній фразі:
Щоб перевірити, чи є властивість в об'єкті, використовуй
'key' in obj- якщо важливі всі властивості (включно з успадкованими), абоObject.hasOwn(obj, 'key')- якщо потрібні лише власні.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.