Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как безопасно прочитать вложенное свойство

Короткий ответ

Оператор ?. останавливается и возвращает 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.