Как безопасно прочитать вложенное свойство
Короткий ответ
Оператор ?. останавливается и возвращает undefined, если часть слева равна null или undefined:
const user = { name: 'Anna' };
console.log(user.address?.city);Результат:
undefinedЗначение по умолчанию
Добавьте ??, чтобы получить значение вместо undefined:
const user = { name: 'Anna' };
console.log(user.address?.city ?? 'unknown');Результат:
unknownМассивы и методы
?. работает и перед квадратными скобками, и перед вызовом функции:
const order = { items: [] };
const settings = {};
console.log(order.items?.[0]?.title ?? 'no items');
console.log(settings.onSave?.() ?? 'no handler');Результат:
no items
no handlerЧастая ошибка
Без ?. чтение свойства у undefined выбрасывает ошибку и останавливает программу:
const user = { name: 'Anna' };
try {
console.log(user.address.city);
} catch (error) {
console.log(error.message);
}Результат:
Cannot read properties of undefined (reading 'city')Функции из этого ответа
- Optional chaining (?.) — Безопасное обращение к свойству: вернёт undefined вместо ошибки, если объекта нет.
- Nullish coalescing (??) — Возвращает значение справа, если слева null или undefined.