Optional chaining (?.)
Безопасное обращение к свойству: вернёт undefined вместо ошибки, если объекта нет.
Доступно с: ES2020
Синтаксис
obj?.prop / obj?.[key] / fn?.()Примеры
Вложенное свойство, которого может не быть:
const user = { name: 'Anna' };
console.log(user.address?.city);Результат:
undefinedБез ?. та же запись вызывает ошибку:
const user = { name: 'Anna' };
try {
console.log(user.address.city);
} catch (error) {
console.log(error.name);
}Результат:
TypeErrorВместе с ?? и для вызова метода:
const user = { name: 'Anna' };
console.log(user.address?.city ?? 'no city');
console.log(user.greet?.());Результат:
no city
undefinedПримечания
Проверка срабатывает только для null и undefined. Не ставьте ?. везде подряд: если объект обязан существовать, ошибка честнее, чем молчаливый undefined.
См. также
- Nullish coalescing (??) — Возвращает значение справа, если слева null или undefined.
- TypeError — Ошибка «значение не того типа» — например, вызов метода у undefined.
- in — Проверяет, есть ли у объекта свойство (в том числе унаследованное).
Вопросы и ответы по теме
В учебнике
- Опциональная цепочка и ?? — Безопасный доступ к вложенным свойствам в JavaScript: оператор ?., вызов необязательных методов и значения по умолчанию через ??.