Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Перевірка наявності властивості в об'єкті». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Щоб перевірити наявність властивості в об'єкті, використовують оператор `in` (враховує успадковані властивості), метод `hasOwnProperty()` або сучасний `Object.hasOwn()` (обидва перевіряють лише власні властивості). Порівняння зі `undefined` - найпростіший спосіб, але дає хибний результат, якщо властивість існує зі значенням `undefined`. **Ключове:** `'key' in obj` перевіряє всі властивості, включно з успадкованими, а `Object.hasOwn(obj, 'key')` - лише власні.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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')); // false ``` --- ## 3. **Перевірка на** `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')` - якщо потрібні **лише власні**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.