You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Это работает, тут нет ошибки... Но это довольно неэлегантно. Как вы можете видеть, `"user.address"` появляется в коде дважды. Для более глубоко вложенных свойств это становится проблемой, поскольку потребуется больше повторений.
48
48
49
-
Так например, давайте попробуем получить `user.address.street.name`.
49
+
К примеру, давайте попробуем получить `user.address.street.name`.
50
50
51
51
Нам нужно проверить как `user.address`, так и `user.address.street`:
Так например, в `user?.address.street.name``?.` позволяет `user` безопасно быть `null/undefined` (и в этом случае возвращает `undefined`), но это только для `user`. Доступ к последующим свойствам осуществляется обычным способом. Если мы хотим, чтобы некоторые из них были необязательными, тогда нам нужно будет заменить больше `.` на `?.`.
Нам следует использовать `?.` только там, где это нормально, что чего-то не существует.
109
+
Нам следует использовать `?.` только там, где нормально, что чего-то не существует.
110
110
111
-
К примеру, если в соответствии с нашей логикой кода объект `user` должен существовать, но `address` является необязательным, то нам следует писать `user.address?.street`, но не `user?.address?.street`.
111
+
К примеру, если, в соответствии с нашей логикой кода, объект `user` должен существовать, но `address` является необязательным, то нам следует писать `user.address?.street`, но не `user?.address?.street`.
112
112
113
113
В этом случае, если вдруг `user` окажется `undefined`, мы увидим программную ошибку по этому поводу и исправим её. В противном случае, если слишком часто использовать `?.`, ошибки могут замалчиваться там, где это неуместно, и их будет сложнее отлаживать.
114
114
```
@@ -123,7 +123,7 @@ user?.address;
123
123
Переменная должна быть объявлена (к примеру, как `let/const/varuser` или как параметр функции). Опциональная цепочка работает только с объявленными переменными.
124
124
````
125
125
126
-
## Вычисления по короткой схеме
126
+
## Сокращённое вычисление
127
127
128
128
Как было сказано ранее, `?.` немедленно останавливает вычисление, если левая часть не существует.
0 commit comments