--- sidebar_position: 5 --- # Опциональная цепочка '?.' Опциональная цепочка ?. останавливает вычисление и возвращает `undefined`, если значение перед ?. равно `undefined` или `null`. ```js let user = {}; // пользователь без адреса alert( user?.address?.street ); // undefined (без ошибки) ``` ### Другие варианты применения: ?.(), ?.[] Опциональная цепочка ?. — это не оператор, а специальная синтаксическая конструкция, которая также работает с функциями и квадратными скобками. Например, ?.() используется для вызова функции, которая может не существовать. ❗ ***Мы можем использовать ?. для безопасного чтения и удаления, но не для записи*** Опциональная цепочка ?. не имеет смысла в левой части присваивания. ```js let user = null; user?.name = "John"; // Ошибка, не работает // то же самое что написать undefined = "John" ``` ## Итого Синтаксис опциональной цепочки ?. имеет три формы: 1. **obj?.prop** – возвращает ***obj.prop*** если `obj` существует, в противном случае `undefined`. 2. **obj?.[prop]** – возвращает ***obj[prop]*** если `obj` существует, в противном случае `undefined`. 3. **obj.method?.()** – вызывает ***obj.method()***, если obj.method существует, в противном случае возвращает `undefined`. Как мы видим, все они просты и понятны в использовании. ?. проверяет левую часть на `null/undefined` и позволяет продолжить вычисление, если это не так. Цепочка ?. позволяет безопасно получать доступ к вложенным свойствам. 🚀 **Источник: [https://learn.javascript.ru/optional-chaining](https://learn.javascript.ru/optional-chaining)**