Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Відсутність властивості». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Щоб перевірити, що властивість існує в об'єкті, але має значення `undefined` (а не просто відсутня), потрібно поєднати дві перевірки: `'key' in obj` (наявність ключа) і `obj.key === undefined` (значення). Сама лише перевірка `obj.key === undefined` дає `true` і для відсутнього ключа, і для наявного ключа зі значенням `undefined`. **Ключове:** `'key' in obj && obj.key === undefined` - єдиний спосіб точно розрізнити ці дві ситуації.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображенняу JavaScript **властивість може взагалі бути відсутньою**, а може **існувати, але мати значення** `undefined`, і це дві *різні ситуації*! Розберемо, як відрізнити їх. --- ## 1. Перевірка на існування властивості Спершу згадаємо, як перевірити, **чи є властивість в об'єкті**: ```javascript 'key' in obj // true, якщо властивість є (навіть якщо undefined) Object.hasOwn(obj, 'key') // те саме, тільки безпечніше ``` Але `'key' in obj` не каже, чому дорівнює властивість, вона лише перевіряє, що ключ **існує в об'єкті**. --- ## 2. Перевірка, що властивість **є, але дорівнює** `undefined` Приклад ситуації: ```javascript const obj = { a: undefined }; ``` Тепер порівняємо з об'єктом без властивості: ```javascript const obj2 = {}; ``` --- ## 3. Різниця на практиці ```javascript console.log('a' in obj); // true (властивість є) console.log('a' in obj2); // false (властивості немає) console.log(obj.a === undefined); // true console.log(obj2.a === undefined); // true (обидва дають true!) ``` Проблема: проста перевірка `obj.a === undefined` **не відрізняє** "відсутність властивості" від "властивість є, але undefined". --- ## 4. Рішення - комбінувати перевірки Щоб точно дізнатися, що **властивість є і дорівнює** `undefined`, потрібно: ```javascript if ('a' in obj && obj.a === undefined) { console.log('Властивість є, але значення undefined'); } ``` `'a' in obj` перевіряє **наявність ключа**, а `obj.a === undefined` перевіряє **значення**. --- ## 5. Приклад: порівняння всіх випадків ```javascript const data = { a: undefined, b: 10 }; console.log('a' in data, data.a); // true, undefined console.log('b' in data, data.b); // true, 10 console.log('c' in data, data.c); // false, undefined ``` Тільки `'a' in data` поверне `true`, означаючи, що ключ **є**, навіть якщо його значення `undefined`. --- ## Підсумок | Перевірка | Що робить | Відрізняє наявність ключа? | |---|---|---| | `obj.key === undefined` | Перевіряє лише значення | Ні | | `'key' in obj` | Перевіряє, чи є ключ | Так | | `'key' in obj && obj.key === undefined` | Перевіряє обидві умови | Так | | `Object.hasOwn(obj, 'key')` | Сучасний аналог `in` | Так |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.