Необязательная цепочка? это последнее модное слово? ...Нет, это не блокчейн, не волнуйтесь.

Необязательная цепочка — это предложение четвертого этапа, которое позволяет вам безопасно проверять свойства объекта, не выдавая ошибку, если свойство не найдено.

Как это выглядит?

MyObject.myProperty?.subProperty

Что это значит??

Функционально это эквивалентно проверке того, что данное свойство равно null или не определено.

const testObj = 
(MyObject.myProperty === null || myObject.myProperty === undefined)     ? undefined : myObject.myProperty.subProperty

Хорошо, но когда мне его использовать?

Вы видели условные операторы, которые продолжают выполняться, верно? Знаешь, те, что выглядят примерно так...

if (
MyObject && myObject.myProperty && myObject.myProperty.subProperty
) {
   // equally as spaghetti code
}

Даже не заставляйте меня начинать, когда есть доступ к нескольким объектам с вложенными свойствами 😬

Значит, мне следует использовать его всякий раз, когда я обращаюсь к вложенному объекту?

О, нет, не делай этого. Как бы прекрасно ни выглядела тысяча вопросительных знаков на экране, это излишество!

Надеюсь, вы сможете сделать несколько надежных предположений об объектах, с которыми взаимодействуете…надеюсь🙏

Это означает, что вам не следует на самом деле слишком часто использовать необязательную цепочку. Возможно, вы имеете дело с объектом-потребителем, для которого может быть установлен или не установлен адрес электронной почты. Вот когда вы хотите его использовать! И наоборот, если каждый потребительский объект будет иметь имя, вам не нужно будет его использовать. Если это так, возможно, ваша кодовая база сомнительна 😅

Полезно знать... что, если у меня есть функция внутри объекта, к которому я обращаюсь?

Это удобный вопрос, мне было интересно, как я начну болтать о доступе к функциям…

Эта функция в объекте являетсясвойством, так что вы уже можете безопасно использовать там необязательную цепочку. Однако на самом деле вы можете пойти еще дальше 😄 Вы можете проверить, что свойство, на которое вы ссылаетесь, действительно является функцией!

На что это похоже?

Вы оооооочень умеете задавать правильные вопросы…

MyObject?.myFunction?.()

Вы можете не только проверить, существует ли свойство (или функция), но и добавить необязательную цепочку к вызову функции!

Что происходит, когда это не функция?

Во-первых, вы получите undefined . Во-вторых, если свойство не является функцией, а является просто свойством, оно вызовет исключение TypeError, говорящее что-то вроде myObject.myFunction is not a function

** Совет**

Вы можете использовать его в тех случаях, когда API для функции еще не существует!

Как установить необязательную цепочку?

Через Вавилон!

Спасибо за чтение!

Вдохновение: