Skip to content

Commit 51b22ee

Browse files
authored
smth
1 parent 9754e3e commit 51b22ee

File tree

1 file changed

+9
-9
lines changed
  • 1-js/04-object-basics/07-optional-chaining

1 file changed

+9
-9
lines changed

1-js/04-object-basics/07-optional-chaining/article.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99

1010
Если вы только начали читать учебник и изучать JavaScript, то, возможно, проблема вас ещё не коснулась, но она довольно распространена.
1111

12-
В качестве примера предположим, что у нас есть объекты "user", которые содержат информацию о наших пользователях.
12+
В качестве примера предположим, что у нас есть объекты `user`, которые содержат информацию о наших пользователях.
1313

1414
У большинства наших пользователей есть адреса в свойстве `user.address` с улицей `user.address.street`, но некоторые из них их не указали.
1515

16-
В таком случае, когда мы попытаемся получить `user.address.street`(а пользователь окажется без адреса), мы получим ошибку:
16+
В таком случае, когда мы попытаемся получить `user.address.street`, а пользователь окажется без адреса, мы получим ошибку:
1717

1818
```js run
1919
let user = {}; // пользователь без свойства "address"
@@ -46,7 +46,7 @@ alert(user.address ? user.address.street : undefined);
4646

4747
Это работает, тут нет ошибки... Но это довольно неэлегантно. Как вы можете видеть, `"user.address"` появляется в коде дважды. Для более глубоко вложенных свойств это становится проблемой, поскольку потребуется больше повторений.
4848

49-
Так например, давайте попробуем получить `user.address.street.name`.
49+
К примеру, давайте попробуем получить `user.address.street.name`.
5050

5151
Нам нужно проверить как `user.address`, так и `user.address.street`:
5252

@@ -58,7 +58,7 @@ alert(user.address ? user.address.street ? user.address.street.name : null : nul
5858

5959
Это просто ужасно, у кого-то могут даже возникнуть проблемы с пониманием такого кода.
6060

61-
Вообще не стоит волноваться, так как есть лучший способ написать это, используя оператор `&&`:
61+
На самом деле это не большая проблема, так как есть лучший способ написать это, используя оператор `&&`:
6262

6363
```js run
6464
let user = {}; // пользователь без адреса
@@ -106,9 +106,9 @@ alert( user?.address.street ); // undefined
106106
Так например, в `user?.address.street.name` `?.` позволяет `user` безопасно быть `null/undefined` (и в этом случае возвращает `undefined`), но это только для `user`. Доступ к последующим свойствам осуществляется обычным способом. Если мы хотим, чтобы некоторые из них были необязательными, тогда нам нужно будет заменить больше `.` на `?.`.
107107
108108
```warn header="Не злоупотребляйте опциональной цепочкой"
109-
Нам следует использовать `?.` только там, где это нормально, что чего-то не существует.
109+
Нам следует использовать `?.` только там, где нормально, что чего-то не существует.
110110

111-
К примеру, если в соответствии с нашей логикой кода объект `user` должен существовать, но `address` является необязательным, то нам следует писать `user.address?.street`, но не `user?.address?.street`.
111+
К примеру, если, в соответствии с нашей логикой кода, объект `user` должен существовать, но `address` является необязательным, то нам следует писать `user.address?.street`, но не `user?.address?.street`.
112112

113113
В этом случае, если вдруг `user` окажется `undefined`, мы увидим программную ошибку по этому поводу и исправим её. В противном случае, если слишком часто использовать `?.`, ошибки могут замалчиваться там, где это неуместно, и их будет сложнее отлаживать.
114114
```
@@ -123,7 +123,7 @@ user?.address;
123123
Переменная должна быть объявлена (к примеру, как `let/const/var user` или как параметр функции). Опциональная цепочка работает только с объявленными переменными.
124124
````
125125

126-
## Вычисления по короткой схеме
126+
## Сокращённое вычисление
127127

128128
Как было сказано ранее, `?.` немедленно останавливает вычисление, если левая часть не существует.
129129

@@ -198,8 +198,8 @@ delete user?.name; // удаляет user.name если пользователь
198198
```js run
199199
let user = null;
200200
201-
user?.name = "John"; // Error, не работает
202-
// потому что он вычисляется как undefined = "John"
201+
user?.name = "John"; // Ошибка, не работает
202+
// потому что вычисляется как undefined = "John"
203203
```
204204

205205
Она недостаточно "умна" для этого.

0 commit comments

Comments
 (0)