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
There are three logical operators in JavaScript: `||` (OR), `&&` (AND), `!` (NOT).
3
+
В JavaScript представлены три логических оператора: `||` (ИЛИ), `&&` (И) и `!` (НЕ).
4
4
5
-
Although they are called "logical", they can be applied to values of any type, not only boolean. Their result can also be of any type.
5
+
Несмотря на своё название, данные операторы в состоянии применяться к значениям любых типов. Полученные результаты также могут иметь различный тип.
6
6
7
-
Let's see the details.
7
+
Давайте рассмотрим эту тему детальнее.
8
8
9
-
## || (OR)
9
+
## || (ИЛИ)
10
10
11
-
The "OR" operator is represented with two vertical line symbols:
11
+
Оператор "ИЛИ" выглядит как двойной символ вертикальной черты:
12
12
13
13
```js
14
14
result = a || b;
15
15
```
16
16
17
-
In classical programming, the logical OR is meant to manipulate boolean values only. If any of its arguments are `true`, it returns`true`, otherwise it returns`false`.
17
+
В классическом программировании ИЛИ предназначено только для манипулирования булевыми значениями: в случае, если какой-либо из аргументов `true`, он вернет`true`, в противной ситуации возвращается `false`.
18
18
19
-
In JavaScript, the operator is a little bit trickier and more powerful. But first, let's see what happens with boolean values.
19
+
В JavaScript, как мы увидим далее, этот оператор работает несколько иным образом. Но давайте сперва посмотрим, что происходит с булевыми значениями.
20
20
21
-
There are four possible logical combinations:
21
+
Существует всего четыре возможные логические комбинации:
alert( undefined||null||0 ); // 0 (поскольку все ложно, возвращается последнее значение)
98
98
```
99
99
100
-
This leads to some interesting usage compared to a "pure, classical, boolean-only OR".
100
+
Это более интересное применение оператора по сравнению с "чистым, классическим, только булевым ИЛИ".
101
101
102
-
1.**Getting the first truthy value from a list of variables or expressions.**
102
+
1.**Получение первого истинного значения из списка переменных или выражений.**
103
103
104
-
Imagine we have several variables which can either contain data or be `null/undefined`. How can we find the first one with data?
104
+
Представьте, что у нас имеется несколько переменных, которые могут содержать данные или быть `null/undefined`. Как мы можем найти первую переменную с данными?
105
105
106
-
We can use OR`||`:
106
+
С помощью`||`:
107
107
108
108
```js run
109
109
let currentUser =null;
@@ -113,27 +113,27 @@ This leads to some interesting usage compared to a "pure, classical, boolean-onl
113
113
let name = currentUser || defaultUser ||"unnamed";
114
114
*/!*
115
115
116
-
alert( name ); //selects "John" – the first truthy value
116
+
alert( name ); //выбирается "John" – первое истинное значение
117
117
```
118
118
119
-
If both `currentUser` and`defaultUser`were falsy, `"unnamed"` would be the result.
120
-
2.**Short-circuit evaluation.**
119
+
Если бы и `currentUser`, и`defaultUser`были ложными, в качестве результата мы бы наблюдали `"unnamed"`.
120
+
2.**Выполнение короткого замыкания.**
121
121
122
-
Operands can be not only values, but arbitrary expressions. OR evaluates and tests them from left to right. The evaluation stops when a truthy value is reached, and the value is returned. Thisprocess is called "a short-circuit evaluation" because it goes as short as possible from left to right.
122
+
Операнды могут быть как отдельные значения, так и произвольные выражения. ИЛИ вычисляет их слева направо. Вычисление останавливается при достижении первого истинного значения. Такое поведение называется "коротким замыканием", поскольку второй операнд вычисляется только в том случае, если первого не достаточно для вычисления всего выражения.
123
123
124
-
This is clearly seen when the expression given as the second argument has a side effect like a variable assignment.
124
+
Это хорошо заметно, когда выражение, указанное в качестве второго аргумента, имеет изменение состояния, такое как присвоение переменной.
125
125
126
-
In the example below,`x`does not get assigned:
126
+
В приведенном ниже примере`x`не изменяется:
127
127
128
128
```js run no-beautify
129
129
let x;
130
130
131
131
*!*true*/!* || (x = 1);
132
132
133
-
alert(x); // undefined, because (x = 1) not evaluated
133
+
alert(x); // undefined, потому что (x = 1) не вычисляется
134
134
```
135
135
136
-
If, instead, the first argument is`false`, `||`evaluates the second one, thus running the assignment:
136
+
Если бы первый аргумент имел значение`false`, то `||`приступил бы к вычислению второго и выполнил операцию присваивания:
137
137
138
138
```js run no-beautify
139
139
let x;
@@ -143,21 +143,21 @@ This leads to some interesting usage compared to a "pure, classical, boolean-onl
143
143
alert(x); // 1
144
144
```
145
145
146
-
An assignment is a simple case. Other side effects can also be involved.
146
+
Присвоение - простой случай. Могут быть и другие.
147
147
148
-
As we can see, such a use case is a "shorter way of doing `if`". The first operand is converted to boolean. If it's false, the second one is evaluated.
148
+
Как мы видим, этот вариант использования `||` является "аналогом `if`". Первый операнд преобразуется в логический. Если он оказывается ложным, начинается вычисление второго.
149
149
150
-
Most of time, it's better to use a "regular"`if` to keep the code easy to understand, but sometimes this can be handy.
150
+
В большинстве случаев лучше использовать "обычный"`if`, чтобы облегчить понимание кода, но иногда это может быть удобно.
151
151
152
-
## && (AND)
152
+
## && (И)
153
153
154
-
The AND operator is represented with two ampersands`&&`:
154
+
Оператор И пишется как два амперсанда`&&`:
155
155
156
156
```js
157
157
result = a && b;
158
158
```
159
159
160
-
In classical programming, AND returns`true`if both operands are truthy and `false` otherwise:
160
+
В классическом программировании И возвращает`true`, если оба аргумента истинны, а иначе – `false`:
Just as withOR, any value is allowed as an operand ofAND:
180
+
Как и в случае с ИЛИ, любое значение допускается в качестве операнда И:
181
181
182
182
```js run
183
-
if (1 && 0) { // evaluated as true && false
183
+
if (1 && 0) { // оценивается как true && false
184
184
alert( "won't work, because the result is falsy" );
185
185
}
186
186
```
187
187
188
188
189
-
## AND finds the first falsy value
189
+
## И находит первое ложное значение
190
190
191
-
Given multiple AND'ed values:
191
+
При наличии нескольких значений И:
192
192
193
193
```js
194
194
result = value1 && value2 && value3;
195
195
```
196
196
197
-
The AND `&&` operator does the following:
197
+
Оператор `&&`выполняет следующие действия:
198
198
199
-
- Evaluates operands from left to right.
200
-
- For each operand, converts it to a boolean. If the result is `false`, stops and returns the original value of that operand.
201
-
- If all operands have been evaluated (i.e. all were truthy), returns the last operand.
199
+
-Вычисляет операнды слева направо.
200
+
-Каждый операнд преобразует в логическое значение. Если результат `false`, останавливается и возвращает исходное значение этого операнда.
201
+
-Если все операнды были истинными, возвращается последний.
202
202
203
-
In other words, AND returns the first falsy value or the last value if none were found.
203
+
Другими словами, И возвращает первое ложное значение. Или последнее, если ничего не найдено.
204
204
205
-
The rules above are similar to OR. The difference is that AND returns the first *falsy* value while OR returns the first *truthy* one.
205
+
Вышеуказанные правила схожи с поведением ИЛИ. Разница в том, что И возвращает первое *ложное* значение, а ИЛИ - первое *истинное*.
206
206
207
-
Examples:
207
+
Примеры:
208
208
209
209
```js run
210
-
// if the first operand is truthy,
211
-
// AND returns the second operand:
210
+
// Если первый операнд истинный,
211
+
// И возвращает второй:
212
212
alert( 1 && 0 ); // 0
213
213
alert( 1 && 5 ); // 5
214
214
215
-
// if the first operand is falsy,
216
-
// AND returns it. The second operand is ignored
215
+
// Если первый операнд ложный,
216
+
// И возвращает его. Второй операнд игнорируется
217
217
alert( null && 5 ); // null
218
218
alert( 0 && "no matter what" ); // 0
219
219
```
220
220
221
-
We can also pass several values in a row. See how the first falsy one is returned:
221
+
Можно передать несколько значений подряд. В таком случае возвратится первое "ложное" значение, на котором остановились вычисления.
222
222
223
223
```js run
224
224
alert( 1 && 2 && null && 3 ); // null
225
225
```
226
226
227
-
When all values are truthy, the last value is returned:
227
+
Когда все значения верны, возвращается последнее
228
228
229
229
```js run
230
-
alert( 1 && 2 && 3 ); // 3, the last one
230
+
alert( 1 && 2 && 3 ); // 3
231
231
```
232
232
233
-
````smart header="Precedence of AND `&&` is higher than OR `||`"
234
-
The precedence of AND `&&` operator is higher than OR `||`.
233
+
````smart header="Приоритет оператора `&&` больше, чем у `||`"
234
+
Приоритет оператора И `&&`больше, чем ИЛИ `||`, так что он выполняется раньше.
235
235
236
-
So the code `a && b || c && d` is essentially the same as if the `&&` expressions were in parentheses: `(a && b) || (c && d)`.
236
+
Таким образом, код`a && b || c && d`по существу такой же, как если бы выражения `&&`были в круглых скобках:`(a && b) || (c && d)`.
237
237
````
238
238
239
-
Just like OR, the AND `&&` operator can sometimes replace `if`.
239
+
Как и оператор ИЛИ, И `&&`иногда может заменять`if`.
240
240
241
-
For instance:
241
+
К примеру:
242
242
243
243
```js run
244
244
let x = 1;
245
245
246
246
(x > 0) && alert( 'Greater than zero!' );
247
247
```
248
248
249
-
The action in the right part of `&&` would execute only if the evaluation reaches it. That is, only if `(x > 0)` is true.
249
+
Действие в правой части `&&`выполнится только в том случае, если до него дойдут вычисления. То есть, `alert` сработает, если в левой части будет `true`.
250
250
251
-
So we basically have an analogue for:
251
+
252
+
Получился аналог:
252
253
253
254
```js run
254
255
let x = 1;
@@ -258,46 +259,46 @@ if (x > 0) {
258
259
}
259
260
```
260
261
261
-
The variant with `&&` appears shorter. But `if` is more obvious and tends to be a little bit more readable.
262
+
Однако, как правило, вариант с `if`лучше читается и воспринимается.
262
263
263
-
So we recommend using every construct for its purpose: use `if` if we want if and use `&&` if we want AND.
264
+
Он более очевиден, поэтому лучше использовать его.
264
265
265
-
## ! (NOT)
266
+
## ! (НЕ)
266
267
267
-
The boolean NOT operator is represented with an exclamation sign `!`.
268
+
Оператор НЕ представлен восклицательным знаком`!`.
268
269
269
-
The syntax is pretty simple:
270
+
Синтаксис довольно прост:
270
271
271
272
```js
272
273
result = !value;
273
274
```
274
275
275
-
The operator accepts a single argument and does the following:
276
+
Оператор принимает один аргумент и выполняет следующие действия:
276
277
277
-
1. Converts the operand to boolean type: `true/false`.
278
-
2. Returns the inverse value.
278
+
1.Сначала приводит аргумент к логическому типу`true/false`.
279
+
2.Затем возвращает противоположное значение.
279
280
280
-
For instance:
281
+
Например:
281
282
282
283
```js run
283
284
alert( !true ); // false
284
285
alert( !0 ); // true
285
286
```
286
287
287
-
A double NOT `!!` is sometimes used for converting a value to boolean type:
288
+
В частности, двойное НЕ используют для преобразования значений к логическому типу:
288
289
289
290
```js run
290
291
alert( !!"non-empty string" ); // true
291
292
alert( !!null ); // false
292
293
```
293
294
294
-
That is, the first NOT converts the value to boolean and returns the inverse, and the second NOT inverses it again. In the end, we have a plain value-to-boolean conversion.
295
+
То есть первое НЕ преобразует значение в логическое значение и возвращает обратное, а второе НЕ снова инвертирует его. В конце мы имеем простое преобразование значения в логическое.
295
296
296
-
There's a little more verbose way to do the same thing -- a built-in`Boolean`function:
297
+
Есть немного более подробный способ сделать то же самое - встроенная `Boolean`функция:
297
298
298
299
```js run
299
300
alert( Boolean("non-empty string") ); // true
300
301
alert( Boolean(null) ); // false
301
302
```
302
303
303
-
The precedence ofNOT`!`is the highest of all logical operators, so it always executes first, before`&&`or`||`.
304
+
Приоритет НЕ `!`является наивысшим из всех логических операторов, поэтому он всегда выполняется первым, перед`&&`или`||`.
0 commit comments