Skip to main content

Неіснуюча властивість об'єкта

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

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


Приклад

javascript
const user = { name: 'Oleh' }; console.log(user.name); // "Oleh" console.log(user.age); // undefined console.log(user.address); // undefined

JavaScript не видає помилку, а просто повертає undefined.


Чому так відбувається

JS при зверненні до властивості:

  1. Перевіряє, чи є вона в об'єкті.
  2. Якщо є → повертає її значення.
  3. Якщо немає → повертає undefined.

Тобто:

javascript
user.hasOwnProperty('age'); // false user.age; // undefined

Але важливо: помилка з'явиться, якщо звернутися далі по ланцюжку

javascript
console.log(user.address.city); // TypeError

Чому? user.address - це undefined, а у undefined не можна запитувати властивості (city).


Як уникнути помилки при доступі до вкладених властивостей

Спосіб 1. Ручні перевірки

javascript
if (user.address && user.address.city) { console.log(user.address.city); }

Спосіб 2. Оператор опціонального ланцюжка ?. (сучасний спосіб)

javascript
console.log(user.address?.city); // undefined (але без помилки!)

Якщо зліва від ?. є null або undefined, JS зупиняє обчислення і повертає undefined.


Спосіб 3. Використати типове значення через ??

javascript
console.log(user.address?.city ?? 'Не вказано'); // "Не вказано"

Приклад з динамічним ключем

javascript
const key = 'email'; console.log(user[key]); // undefined (якщо властивості немає)

Навіть при динамічному доступі через [] поведінка та сама, просто undefined.


Відмінність від інших випадків

СитуаціяРезультатПояснення
user.ageundefinedВластивість відсутня
user.age.cityTypeErrorundefined не є об'єктом
'age' in userfalseПеревірка наявності властивості
user.hasOwnProperty('age')falseПеревірка лише власних властивостей
user.name ?? 'ні''Oleh'Повертає значення
user.age ?? 'ні''ні'Типове значення

Підсумок

ПоведінкаЩо робить
obj.missingповертає undefined
Помилки немаєнавіть якщо властивості немає
Помилка з'являєтьсяпри спробі звернутися глибше (undefined.city)
Рішеннявикористати ?. або ??

Приклад для закріплення

javascript
const user = { name: 'Oleh' }; console.log(user.age); // undefined console.log(user.age?.value); // undefined (без помилки) console.log(user.age.value); // TypeError console.log(user.age ?? 'ні'); // "ні"

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

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

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