Optional chaining оператор
Optional chaining (?.) - це сучасний оператор (ES2020),
який дозволяє безпечно звертатися до властивостей об'єктів,
навіть якщо частина ланцюжка - undefined або null.
Проблема без optional chaining
Припустимо, у нас є вкладений об'єкт:
const user = {
profile: {
name: 'Oleh'
}
};Якщо ми спробуємо звернутися до неіснуючого поля:
console.log(user.address.city); // TypeError: Cannot read properties of undefinedПомилка виникає, тому що
user.address-undefined, а спроба звернутися доundefined.cityламає код.
Рішення: оператор ?.
console.log(user.address?.city); // undefined (без помилки)Якщо значення до
?.існує, повертається властивість. Якщо воноundefinedабоnull, повертаєтьсяundefined, і програма не падає.
Як працює синтаксис
1. Доступ до властивостей
user?.profile?.name // "Oleh"
user?.address?.city // undefined2. Доступ до методів
user.sayHi?.(); // викличе метод, якщо він існує3. Доступ до елементів масиву
const arr = null;
console.log(arr?.[0]); // undefined (без помилки)Приклад з API-даними
const response = {
user: { name: 'Oleh', address: null }
};
console.log(response.user?.address?.city); // undefinedБез ?. довелося б писати довгі перевірки:
response && response.user && response.user.address && response.user.address.cityOptional chaining + nullish coalescing
Часто їх використовують разом:
const city = user.address?.city ?? 'Не вказано';
console.log(city); // "Не вказано"
?.безпечно звертається до властивості.??задає типове значення, якщо результатundefinedабоnull.
Що робить під капотом
obj?.prop
// еквівалентно:
obj == null ? undefined : obj.propДе можна застосовувати
| Ситуація | Приклад | Результат |
|---|---|---|
| Властивість об'єкта | user?.name | 'Oleh' або undefined |
| Вкладені об'єкти | user?.address?.city | безпечно |
| Виклик методу | user.method?.() | викликається, якщо метод є |
| Елемент масиву | arr?.[0] | перший елемент або undefined |
Не можна використовувати
// не можна зліва від присвоєння
user?.name = 'Alex'; // SyntaxError
// не спрацює для перевірки існування (завжди undefined, не false)
if (user?.missing) ...Підсумок
| Що робить | Як працює |
|---|---|
Optional chaining (?.) | Безпечно звертається до властивості, не кидаючи помилку |
| Повертає | undefined, якщо натрапляє на null або undefined |
| Використовується | при доступі до вкладених властивостей, методів і елементів |
| Комбінується | часто з ?? для типових значень |
Коротко
obj?.prop: не впаде, якщоobjдорівнюєnullабоundefinedobj?.method?.(): викличе метод, якщо він існуєarr?.[0]: безпечний доступ до елемента Чудово працює у зв'язці з??
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.