Skip to main content

Наявність властивості в об'єкті

У JavaScript є кілька способів перевірити, чи є в об'єкті та чи інша властивість. Кожен із них працює трохи по-різному: розберемо всі, з прикладами і нюансами.


1. Оператор in

Найпряміший і найнадійніший спосіб.

javascript
const user = { name: 'Oleh', age: 25 }; console.log('name' in user); // true console.log('email' in user); // false

Перевіряє, чи існує властивість узагалі (включно з успадкованими від прототипу).


Приклад зі спадкуванням

javascript
const person = { isHuman: true }; const user = Object.create(person); user.name = 'Oleh'; console.log('name' in user); // true (власна) console.log('isHuman' in user); // true (успадкована)

2. Метод hasOwnProperty()

Перевіряє лише власні властивості (тобто ті, що реально належать самому об'єкту, а не прототипу).

javascript
const person = { isHuman: true }; const user = Object.create(person); user.name = 'Oleh'; console.log(user.hasOwnProperty('name')); // true console.log(user.hasOwnProperty('isHuman')); // false

Використовуй, якщо потрібно переконатися, що властивість визначена в самому об'єкті, а не успадкована.


Обережно:

Якщо хтось перевизначив hasOwnProperty, його краще викликати так:

javascript
Object.prototype.hasOwnProperty.call(user, 'name');

3. Перевірка через undefined

Простий, але не завжди безпечний спосіб:

javascript
const user = { name: 'Oleh' }; console.log(user.name !== undefined); // true console.log(user.email !== undefined); // false

Проблема: властивість може існувати, але мати значення undefined.

javascript
const user = { name: undefined }; console.log('name' in user); // true console.log(user.name !== undefined); // false (обманює)

4. Метод Object.hasOwn() (сучасний, ES2022)

Це "нова версія" hasOwnProperty, але безпечніша (не залежить від ланцюжка прототипів).

javascript
const user = { name: 'Oleh' }; console.log(Object.hasOwn(user, 'name')); // true console.log(Object.hasOwn(user, 'email')); // false

Рекомендується використовувати замість hasOwnProperty() у сучасному коді.


Порівняння способів

МетодПеревіряє успадковані властивостіПеревіряє лише своїБезпечний для будь-яких об'єктівПриклад
'key' in objТакНіТак'name' in user
obj.hasOwnProperty('key')НіТакНе завжди (може бути перевизначений)user.hasOwnProperty('name')
Object.hasOwn(obj, 'key')НіТакТакObject.hasOwn(user, 'name')
obj.key !== undefinedНе завждиНіТакuser.name !== undefined

5. Перевірка через Reflect.has() (альтернатива in)

Ще один варіант (з Reflect API):

javascript
const user = { name: 'Oleh' }; console.log(Reflect.has(user, 'name')); // true console.log(Reflect.has(user, 'email')); // false

Працює точно як in, але зручний у "рефлексивному" (метапрограмному) коді.


Підсумок

МетаНайкращий спосіб
Перевірити будь-яку властивість (включно з прототипами)'prop' in obj
Перевірити лише власну властивістьObject.hasOwn(obj, 'prop')
Підтримка старих браузерівobj.hasOwnProperty('prop')
Перевірити, що значення не undefinedobj.key !== undefined (обережно)

Коротко

  • in: перевіряє наявність властивості (у тому числі успадкованої).
  • hasOwnProperty(): перевіряє лише власні властивості.
  • Object.hasOwn(): сучасна і безпечна альтернатива.
  • Перевірка !== undefined не завжди коректна.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.