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
Во многих практических случаях мы бы предпочли получить здесь `undefined` вместо ошибки (что означало бы "улицы нет").
27
27
28
-
...и еще один пример. В веб-разработке мы можем получить объект, соответствующий элементу веб-страницы, с помощью специального вызова метода, такого как `document.querySelector('.elem')`, и он возвращает `null`, когда такого элемента нет.
28
+
...и ещё один пример. В веб-разработке мы можем получить объект, соответствующий элементу веб-страницы, с помощью специального вызова метода, такого как `document.querySelector('.elem')`, и он возвращает `null`, когда такого элемента нет.
29
29
30
30
```js run
31
31
// document.querySelector('.elem') равен нулю, если элемента нет
32
32
let html =document.querySelector('.elem').innerHTML; // ошибка, если он равен нулю
33
33
```
34
34
35
-
Еще раз, если элемент не существует, мы получим сообщение об ошибке доступа к `.innerHTML` со значением `null`. И в некоторых случаях, когда отсутствие элемента является нормальным, мы хотели бы избежать ошибки и просто принять `html = null` в качестве результата.
35
+
Ещё раз, если элемент не существует, мы получим сообщение об ошибке доступа к `.innerHTML` со значением `null`. И в некоторых случаях, когда отсутствие элемента является нормальным, мы хотели бы избежать ошибки и просто принять `html = null` в качестве результата.
Проход при помощи логического оператора И '`&&` через весь путь к свойству гарантирует, что все компоненты существуют (если нет, вычисление прекращается), но также не является идеальным.
70
70
71
-
Как вы можете видеть, имена свойств по-прежнему дублируются в коде. Например, в приведенном выше коде `user.address` появляется три раза.
71
+
Как вы можете видеть, имена свойств по-прежнему дублируются в коде. Например, в приведённом выше коде `user.address` появляется три раза.
72
72
73
73
Вот почему в язык была добавлена опциональная цепочка `?.`. Чтобы решить эту проблему раз и навсегда!
К примеру, если в соответствии с нашей логикой кодирования объект `user` должен существовать, но `address` является необязательным, то нам следует написать `user.address?.street`, но не `user?.address?.street`.
112
112
113
-
Таким образом, если `user` окажется неопределенным из-за погрешности, мы увидим программную ошибку по этому поводу и исправим ее. В противном случае ошибки кодирования могут замалчиваться там, где это неуместно, и их будет сложнее отлаживать.
113
+
Таким образом, если `user` окажется неопределённым из-за погрешности, мы увидим программную ошибку по этому поводу и исправим её. В противном случае ошибки кодирования могут замалчиваться там, где это неуместно, и их будет сложнее отлаживать.
114
114
```
115
115
116
116
````warn header="Переменная перед `?.` должна быть объявлена"
117
-
Если переменной `user` вообще нет, то `user?.anything`приведет к ошибке:
117
+
Если переменной `user` вообще нет, то `user?.anything`приведёт к ошибке:
118
118
119
119
```js run
120
120
// ReferenceError: user is not defined
@@ -146,7 +146,7 @@ alert(x); // 0, значение не увеличилось
146
146
147
147
Например, `?.()` используется для вызова функции, которая может не существовать.
148
148
149
-
В приведенном ниже коде у некоторых наших пользователей есть метод `admin`, а у некоторых его нет:
149
+
В приведённом ниже коде у некоторых наших пользователей есть метод `admin`, а у некоторых его нет:
150
150
151
151
```js run
152
152
let userAdmin = {
@@ -213,7 +213,7 @@ user?.name = "John"; // Error, не работает
213
213
2.`obj?.[prop]`-- возвращает `obj[prop]` если `obj` существует, в противном случае `undefined`.
214
214
3.`obj.метод?.()`-- вызывает `obj.method()`, если `obj.method` существует, в противном случае возвращает `undefined`.
215
215
216
-
Как мы видим, все они просты и понятны в использовании. `?.` проверяет левую часть на 'null/undefined` и позволяет продолжить вычисление, если это не так.
216
+
Как мы видим, все они просты и понятны в использовании. `?.` проверяет левую часть на `null/undefined` и позволяет продолжить вычисление, если это не так.
217
217
218
218
Цепочка `?.` позволяет безопасно получать доступ к вложенным свойствам.
0 commit comments