Skip to content

Commit b9c2952

Browse files
committed
Fixes
1 parent e354cc1 commit b9c2952

File tree

1 file changed

+14
-16
lines changed
  • 1-js/02-first-steps/12-nullish-coalescing-operator

1 file changed

+14
-16
lines changed

1-js/02-first-steps/12-nullish-coalescing-operator/article.md

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
[recent browser="new"]
44

5-
В этой статье мы считаем выражение "определённым", если его значение отличается от `null` или `undefined`.
5+
В этой статье мы будем говорить, что значение выражение "определено", если оно отличается от `null` или `undefined`.
66

77
Оператор объединения с null представляет собой два вопросительных знака `??`.
88

99
Результат выражения `a ?? b` будет следующим:
10-
- `a`, если `a` — определённое значение,
10+
- `a`, если значение `a` определено,
1111
- `b`, если значение `a` не определено.
1212

13-
То есть оператор `??` возвращает первый аргумент, если он определён, и второй — в противном случае.
13+
То есть оператор `??` возвращает первый аргумент, если он не `null/undefined`, иначе второй.
1414

1515
Оператор объединения с null не является чем-то принципиально новым. Это всего лишь удобный синтаксис, как из двух значений получить одно "определённое".
1616

@@ -20,7 +20,7 @@
2020
result = (a !== null && a !== undefined) ? a : b;
2121
```
2222

23-
Как правило, оператор `??` нужен для того, чтобы определить значение по умолчанию для потенциально неопределённой переменной.
23+
Как правило, оператор `??` нужен для того, чтобы задать значение по умолчанию для потенциально неопределённой переменной.
2424

2525
Например, в следующем примере, если переменная `user` не определена, покажем модальное окно с надписью `Аноним`:
2626

@@ -30,7 +30,7 @@ let user;
3030
alert(user ?? "Аноним"); // Аноним
3131
```
3232
33-
Конечно, если бы переменная `user` содержала любое значение, кроме `null/undefined`, то мы бы увидели имя пользователя:
33+
Конечно, если бы переменная `user` содержала любое значение, кроме `null/undefined`, то мы бы увидели его:
3434
3535
```js run
3636
let user = "Иван";
@@ -40,7 +40,7 @@ alert(user ?? "Аноним"); // Иван
4040
4141
Кроме этого, можно записать последовательность из операторов `??`, чтобы получить первое вычислённое определённое значение из всего списка.
4242
43-
Допустим, у нас есть данные пользователя в переменных `firstName`, `lastName` или `nickName`. Все они могут быть неопределёнными, если отсутствует информация в какой-либо из них.
43+
Допустим, у нас есть данные пользователя в переменных `firstName`, `lastName` или `nickName`. Все они могут быть неопределёнными, если отсутствует соответствующая информация.
4444
4545
Выведем имя пользователя, используя одну из этих переменных, а в случае если все они не определены, то покажем "Аноним".
4646
@@ -61,7 +61,7 @@ alert(firstName ?? lastName ?? nickName ?? "Аноним"); // Суперкод
6161
6262
Оператор ИЛИ `||` можно использовать для того же, что и `??`, как это было показано в [предыдущей главе](info:logical-operators#or-finds-the-first-truthy-value).
6363
64-
Например, в приведённом выше коде можно заменить `??` на `||` и получить тот же самый результат:
64+
Например, если в приведённом выше коде заменить `??` на `||`, то будет тот же самый результат:
6565
6666
```js run
6767
let firstName = null;
@@ -76,15 +76,15 @@ alert(firstName || lastName || nickName || "Аноним"); // Суперкод
7676
7777
Оператор ИЛИ `||` существует с самого появления JavaScript, поэтому ранее для решения похожих задач разработчики использовали именно его.
7878
79-
С другой стороны, совсем не так давно появился оператор объединения с null `??` как раз потому, что не все были довольны оператором `||` .
79+
С другой стороны, сравнительно недавно в язык был добавлен оператор объединения с null `??` как раз потому, что многие были недовольны оператором `||`.
8080
81-
Есть одно тонкое, но важное отличие:
81+
Важное различие между ними заключается в том, что:
8282
- `||` возвращает первое *истинное* значение.
8383
- `??` возвращает первое *определённое* значение.
8484
8585
Проще говоря, оператор `||` не различает `false`, `0`, пустую строку `""` и `null/undefined`. Для него они все одинаковые, т.е. являются ложными значениями. Если первым аргументом для оператора `||` будет любое из перечисленных значений, то в качестве результата мы получим второй аргумент.
8686
87-
Однако на практике часто требуется использовать стандартное значение только тогда, когда переменная является `null/undefined`. Ведь именно тогда значение действительно неизвестно/не определено.
87+
Однако на практике часто требуется использовать значение по умолчанию только тогда, когда переменная является `null/undefined`. Ведь именно тогда значение действительно неизвестно/не определено.
8888
8989
Например, рассмотрим следующий пример:
9090
@@ -95,14 +95,12 @@ alert(height || 100); // 100
9595
alert(height ?? 100); // 0
9696
```
9797
98-
Итак, мы получили нулевую высоту.
99-
10098
- `height || 100` проверяет, имеет ли переменная `height` ложное значение, что так и есть,
10199
- поэтому результатом является второй аргумент, т.е. `100`.
102100
- `height ?? 100` проверяет, что переменная `height` содержит `null/undefined`, а поскольку это не так,
103101
- то результатом является сама переменная `height`, т.е. `0`.
104102
105-
Если предположить, что нашим значением может быть нулевая высота, которая не должна заменяться значением по умолчанию, то оператор `??` — это то, что нам нужно.
103+
Если нулевая высота является "нормальным" значением, которое не должно заменяться значением по умолчанию, то оператор `??` делает как раз то, что нужно.
106104
107105
## Приоритет
108106
@@ -121,7 +119,7 @@ let area = (height ?? 100) * (width ?? 50);
121119
alert(area); // 5000
122120
```
123121
124-
Однако если опустить скобки, то оператор `*` выполнится первым, так как у него приоритет выше, чем у `??`, а это приведёт к неправильным результатам.
122+
Иначе, если опустить скобки, то оператор `*` выполнится первым, так как у него приоритет выше, чем у `??`, а это приведёт к неправильным результатам.
125123
126124
```js
127125
// без круглых скобок
@@ -155,7 +153,7 @@ alert(x); // 2
155153
156154
## Итого
157155
158-
- Оператор объединения с null `??` — это быстрый способ получить "определённое" значение из списка.
156+
- Оператор объединения с null `??` — это быстрый способ выбрать первое "определённое" значение из списка.
159157
160158
Используется для присвоения переменным значений по умолчанию:
161159
@@ -164,5 +162,5 @@ alert(x); // 2
164162
height = height ?? 100;
165163
```
166164
167-
- Оператор `??` имеет очень низкий приоритет, немного выше, чем у `?` и `=`, поэтому при использовании его в выражении возможно потребуются круглые скобки.
165+
- Оператор `??` имеет очень низкий приоритет, лишь немного выше, чем у `?` и `=`, поэтому при использовании его в выражении, скорее всего, потребуются скобки.
168166
- Запрещено использовать вместе с `||` или `&&` без явно указанных круглых скобок.

0 commit comments

Comments
 (0)