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
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/07-operators/article.md
+27-27Lines changed: 27 additions & 27 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Операторы
2
2
3
-
Несколько операторов мы знаем со школы – это обычные сложение `+`, умножение `*`, вычитание `-` и так далее.
3
+
Многие операторы знакомы нам ещё со школы – это обычные сложение `+`, умножение `*`, вычитание `-` и так далее.
4
4
5
5
В этой главе мы сконцентрируемся на операторах, которые в курсе математики не проходят.
6
6
@@ -50,9 +50,9 @@ alert( '1' + 2 ); // "12"
50
50
alert( 2 + '1' ); // "21"
51
51
```
52
52
53
-
Причем не важно, справа или слева находится операнд-строка. Правило простое: если хотя бы один операнд является строкой, то второй будет также преобразован к строке.
53
+
Причём не важно, справа или слева находится операнд-строка. Правило простое: если хотя бы один операнд является строкой, то второй будет также преобразован к строке.
54
54
55
-
Тем не менее, помните, что операции выполняются слева направо. Если перед строкой идут два числа, то числа будут сложены перед преобразование в строку:
55
+
Тем не менее, помните, что операции выполняются слева направо. Если перед строкой идут два числа, то числа будут сложены перед преобразованием в строку:
56
56
57
57
58
58
```js run
@@ -70,7 +70,7 @@ alert( '6' / '2' ); // 3
70
70
71
71
## Преобразование к числу, унарный плюс +
72
72
73
-
Плюс `+` существует в двух формах: бинарной, которую мы использовали выше и унарной форме.
73
+
Плюс `+` существует в двух формах: бинарной, которую мы использовали выше, и унарной.
74
74
75
75
Унарный, то есть применённый к одному значению, плюс `+` ничего не делает с числами. Но если операнд не число, унарный плюс преобразует его в число.
76
76
@@ -93,7 +93,7 @@ alert( +"" ); // 0
93
93
94
94
На самом деле это то же самое, что и `Number(...)`, только короче.
95
95
96
-
Необходимость преобразовать строки в числа возникает очень часто. Например, когда мы получаем значения из HTML-полей, то они обычно в форме строк.
96
+
Необходимость преобразовывать строки в числа возникает очень часто. Например, когда мы получаем значения из HTML-полей, то они обычно в форме строк.
С точки зрения математики такое изобилие плюсов может показаться странным. С точки зрения программирования – никаких разночтений: сначала выполнятся унарные плюсы, приведут строки к числам, а затем – бинарный `'+'` их сложит.
124
+
С точки зрения математики, такое изобилие плюсов может показаться странным. С точки зрения программирования – никаких разночтений: сначала выполнятся унарные плюсы, приведут строки к числам, а затем – бинарный `'+'` их сложит.
125
125
126
126
Почему унарные плюсы выполнились до бинарного сложения? Как мы сейчас увидим, дело в их приоритете.
127
127
128
128
## Приоритет
129
129
130
130
В том случае, если в выражении есть несколько операторов – порядок их выполнения определяется *приоритетом*, или, другими словами, существует неявный порядок приоритетов операторов.
131
131
132
-
Из школы мы знаем, что умножение в выражении `2 * 2 + 1` выполнится раньше сложения, т.к. его *приоритет* выше. К слову, умножение имеет более высокий *приоритет*, чем сложение.
132
+
Из школы мы знаем, что умножение в выражении `2 * 2 + 1` выполнится раньше сложения, т.к. его *приоритет* выше. Говорят, что умножение имеет более высокий *приоритет*, чем сложение.
133
133
134
134
Скобки переопределяют любой приоритет, так что если мы не удовлетворены неявным порядком, мы можем использовать их, чтобы изменить приоритет. Например:`(1 + 2) * 2`.
135
135
136
-
В JavaScript много операторов. Каждый оператор имеет соответствующий номер приоритета. Тот, у кого число больше – выполнится раньше. Если приоритет одинаковый, то порядок выполнения – слева направо.
136
+
В JavaScript много операторов. Каждый оператор имеет соответствующий номер приоритета. Тот, у кого это число больше – выполнится раньше. Если приоритет одинаковый, то порядок выполнения – слева направо.
137
137
138
138
Отрывок из [таблицы приоритетов](https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (нет необходимости всё запоминать, но помните, что у унарных операторов приоритет выше, чем у бинарных):
Так как "унарный плюс" имеет приоритет `16`, который выше, чем `13` у "сложения" (бинарный плюс), то выражении `"+apples + +oranges"` сначала выполнятся унарные плюсы, а затем сложение.
153
+
Так как "унарный плюс" имеет приоритет `16`, который выше, чем `13` у "сложения" (бинарный плюс), то в выражении `"+apples + +oranges"` сначала выполнятся унарные плюсы, а затем сложение.
154
154
155
155
## Присваивание
156
156
157
-
Обратим внимание, в таблице приоритетов также есть оператор присваивания `=`. У него – один из самых низких приоритетов:`3`.
157
+
Давайте отметим, что в таблице приоритетов также есть оператор присваивания `=`. У него один из самых низких приоритетов:`3`.
158
158
159
-
Именно поэтому, когда переменную чему-либо присваивают, например, `x = 2 * 2 + 1`сначала выполнится арифметика, а уже затем – произойдёт присваивание `=`.
159
+
Именно поэтому, когда переменной что-либо присваивают, например, `x = 2 * 2 + 1`, то сначала выполнится арифметика, а уже затем произойдёт присваивание `=`.
160
160
161
161
```js
162
162
let x = 2 * 2 + 1;
@@ -178,7 +178,7 @@ alert( b ); // 4
178
178
alert( c ); // 4
179
179
```
180
180
181
-
Такое присваивание работает справа-налево. Сначала вычисляется самое правое выражение `2 + 2`, и затем присвоится переменным слева:`c`, `b` и `a`. В конце у всех переменных будет одно значение.
181
+
Такое присваивание работает справа-налево. Сначала вычисляется самое правое выражение `2 + 2` и затем оно присвоится переменным слева:`c`, `b` и `a`. В конце у всех переменных будет одно значение.
Все операторы возвращают значение. Для некоторых это более очевидно, например сложение `+` или умножение `*`. Оператор присваивания не является исключением.
@@ -201,7 +201,7 @@ alert( c ); // 0
201
201
202
202
В примере выше результатом `(a = b + 1)` будет значение, которое присваивается в `a` (то есть `3`). Потом оно вычитается от `3`.
203
203
204
-
Забавное применение присваивания, не так ли? Нам нужно понимать как это работает, потому что иногда это можно увидеть в сторонних библиотеках, но писать самим в таком стиле не рекомендуется. Такие трюки не сделают ваш код более понятным или читабельным.
204
+
Забавное применение присваивания, не так ли? Нам нужно понимать, как это работает, потому что иногда это можно увидеть в сторонних библиотеках, но писать самим в таком стиле не рекомендуется. Такие трюки не сделают ваш код более понятным или читабельным.
205
205
````
206
206
207
207
## Взятие остатка %
@@ -222,7 +222,7 @@ alert( 6 % 3 ); // 0, остаток от деления 6 на 3
222
222
223
223
Оператор возведения в степень `**` недавно добавили к языку.
224
224
225
-
Для натурального числа `b` результат `a ** b` равен `a`, умноженному на него`b` раз.
225
+
Для натурального числа `b` результат `a ** b` равен `a`, умноженному на само себя`b` раз.
Есть ли разница между ними? Да, но увидеть её мы сможем, если будем использовать возвращаемое значение `++/--`.
279
279
280
-
Давайте уточним. Как мы знаем все операторы возвращают значение. Операторы инкремент/декремент не исключение. Префиксная форма возвращает новое значение, в то время как постфиксная форма возвращает старое (до увеличения/уменьшения числа).
280
+
Давайте уточним. Как мы знаем, все операторы возвращают значение. Операторы инкремент/декремент не исключение. Префиксная форма возвращает новое значение, в то время как постфиксная форма возвращает старое (до увеличения/уменьшения числа).
281
281
282
282
Пример:
283
283
@@ -341,7 +341,7 @@ let counter = 1;
341
341
alert( 2 * counter++ ); // 2, потому что counter++ возвращает "старое" значение
342
342
```
343
343
344
-
Хотя технически всё в порядке, такая запись обычно делает код менее читабельным. Одна строка выполняет множество действий -- не хорошо.
344
+
Хотя технически всё в порядке, такая запись обычно делает код менее читабельным. Одна строка выполняет множество действий -- нехорошо.
345
345
346
346
При беглом чтении кода можно с лёгкостью пропустить такой `counter++`, и будет неочевидно, что переменая увеличивается.
347
347
@@ -362,15 +362,15 @@ counter++;
362
362
363
363
Поддерживаются следующие побитовые операторы:
364
364
365
-
- AND ( `&` )
366
-
- OR ( `|` )
367
-
- XOR ( `^` )
368
-
- NOT ( `~` )
369
-
- LEFT SHIFT ( `<<` )
370
-
- RIGHT SHIFT ( `>>` )
371
-
- ZERO-FILL RIGHT SHIFT ( `>>>` )
365
+
- AND(и) ( `&` )
366
+
- OR(или) ( `|` )
367
+
- XOR(побитовое исключающее или) ( `^` )
368
+
- NOT(не) ( `~` )
369
+
- LEFT SHIFT(левый сдвиг) ( `<<` )
370
+
- RIGHT SHIFT(правый сдвиг) ( `>>` )
371
+
- ZERO-FILL RIGHT SHIFT(правый сдвиг с заполнением нулями) ( `>>>` )
372
372
373
-
Они используются редко. Чтобы понять их нам нужно углубиться в низкоуровневое представление чисел, и было бы не оптимально делать это прямо сейчас, тем более что они нам не понадобятся в ближайшее время. Если вам интересно, вы можете прочитать статью [Побитовые операторы](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) на MDN. Более практичным было бы сделать это, когда возникнет реальная необходимость.
373
+
Они используются редко. Чтобы понять их, нам нужно углубиться в низкоуровневое представление чисел, и было бы неоптимально делать это прямо сейчас, тем более что они нам не понадобятся в ближайшее время. Если вам интересно, вы можете прочитать статью [Побитовые операторы](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) на MDN. Более практичным было бы сделать это, когда возникнет реальная необходимость.
374
374
375
375
## Сокращённая арифметика с присваиванием
376
376
@@ -422,7 +422,7 @@ let a = (1 + 2, 3 + 4);
422
422
alert( a ); // 7 (результат 3 + 4)
423
423
```
424
424
425
-
Первое выражение `1 + 2` выполняется, а результат отбрасывается. Затем идёт `3 + 4`, выражение выражение выполняется и возвращается результат.
425
+
Первое выражение `1 + 2` выполняется, а результат отбрасывается. Затем идёт `3 + 4`, выражение выполняется и возвращается результат.
426
426
427
427
```smart header="Запятая имеет очень низкий приоритет"
428
428
Пожалуйста, обратите внимание, что оператор запятая имеет очень низкий приоритет, приоритет которого ниже `=`, поэтому скобки важны в приведённом примере выше.
for (*!*a = 1, b = 3, c = a * b*/!*; a < 10; a++) {
442
442
...
443
443
}
444
444
```
445
445
446
-
Такие трюки используются во многих JavaScript-фреймворках. Вот почему мы упоминаем их. Но, обычно, они не улучшают читабельность кода, поэтому нам нужна сначала подумать, прежде чем их использовать.
446
+
Такие трюки используются во многих JavaScript-фреймворках. Вот почему мы упоминаем их. Но, обычно, они не улучшают читабельность кода, поэтому нам нужно сначала подумать, прежде чем их использовать.
0 commit comments