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
В том случае, если в выражении есть несколько операторов – порядок их выполнения определяется *приоритетом*, или, другими словами, существует неявный порядок приоритетов операторов.
130
+
В том случае, если в выражении есть несколько операторов – порядок их выполнения определяется *приоритетом*, или, другими словами, существует определённый порядок выполнения операторов.
131
131
132
-
Из школы мы знаем, что умножение в выражении `2 * 2 + 1` выполнится раньше сложения, т.к. его *приоритет* выше. Говорят, что умножение имеет более высокий *приоритет*, чем сложение.
132
+
Из школы мы знаем, что умножение в выражении `2 * 2 + 1` выполнится раньше сложения. Это как раз и есть "приоритет". Говорят, что умножение имеет более высокий приоритет, чем сложение.
133
133
134
-
Скобки переопределяют любой приоритет, так что если мы не удовлетворены неявным порядком, мы можем использовать их, чтобы изменить приоритет. Например:`(1 + 2) * 2`.
134
+
Скобки важнее, чем приоритет, так что если мы не удовлетворены порядком по умолчанию, мы можем использовать их, чтобы изменить приоритет. Например, написать`(1 + 2) * 2`.
135
135
136
136
В JavaScript много операторов. Каждый оператор имеет соответствующий номер приоритета. Тот, у кого это число больше – выполнится раньше. Если приоритет одинаковый, то порядок выполнения – слева направо.
137
137
138
-
Отрывок из [таблицы приоритетов](https://developer.mozilla.org/ru/JavaScript/Reference/operators/operator_precedence) (нет необходимости всё запоминать, но помните, что у унарных операторов приоритет выше, чем у бинарных):
138
+
Отрывок из [таблицы приоритетов](https://developer.mozilla.org/ru/JavaScript/Reference/operators/operator_precedence) (нет необходимости всё запоминать, обратите внимание, что у унарных операторов приоритет выше, чем у соответствующих бинарных):
139
139
140
140
| Приоритет | Название | Обозначение |
141
141
|------------|------|------|
@@ -181,7 +181,7 @@ alert( c ); // 4
181
181
Такое присваивание работает справа-налево. Сначала вычисляется самое правое выражение `2 + 2`, и затем оно присвоится переменным слева:`c`, `b` и `a`. В конце у всех переменных будет одно значение.
Все операторы возвращают значение. Для некоторых это более очевидно, например сложение `+` или умножение `*`. Оператор присваивания не является исключением.
184
+
Все операторы возвращают значение. Для некоторых это очевидно, например сложение `+` или умножение `*`. Но и оператор присваивания не является исключением.
185
185
186
186
Вызов `x = value` записывает `value` в `x`*и возвращает его*.
187
187
@@ -199,14 +199,14 @@ alert( a ); // 3
199
199
alert( c ); // 0
200
200
```
201
201
202
-
В примере выше результатом `(a = b + 1)` будет значение, которое присваивается в `a` (то есть `3`). Потом оно вычитается от `3`.
202
+
В примере выше результатом `(a = b + 1)` будет значение, которое присваивается в `a` (то есть `3`). Потом оно используется для дальнейших вычислений.
203
203
204
-
Забавное применение присваивания, не так ли? Нам нужно понимать, как это работает, потому что иногда это можно увидеть в сторонних библиотеках, но писать самим в таком стиле не рекомендуется. Такие трюки не сделают ваш код более понятным или читабельным.
204
+
Забавное применение присваивания, не так ли? Нам нужно понимать, как это работает, потому что иногда это можно увидеть в JavaScript-библиотеках, но писать самим в таком стиле не рекомендуется. Такие трюки не сделают ваш код более понятным или читабельным.
205
205
````
206
206
207
207
## Остаток от деления %
208
208
209
-
Оператор взятия остатка `%` интересен тем, что, несмотря на обозначение, никакого отношения к процентам не имеет.
209
+
Оператор взятия остатка `%`, несмотря на обозначение, никакого отношения к процентам не имеет..
210
210
211
211
Его результат `a % b` – это остаток от деления `a` на `b`.
Обе эти формы записи делают одно и то же: увеличивают `counter` на `1`.
277
277
278
-
Есть ли разница между ними? Да, но увидеть её мы сможем, если будем использовать возвращаемое значение `++/--`.
278
+
Есть ли разница между ними? Да, но увидеть её мы сможем, только если будем значение, которое возвращают `++/--`.
279
279
280
-
Давайте уточним. Как мы знаем, все операторы возвращают значение. Операторы инкремент/декремент не исключение. Префиксная форма возвращает новое значение, в то время как постфиксная форма возвращает старое (до увеличения/уменьшения числа).
280
+
Давайте проясним этот момент. Как мы знаем, все операторы возвращают значение. Операторы инкремент/декремент не исключение. Префиксная форма возвращает новое значение, в то время как постфиксная форма возвращает старое (до увеличения/уменьшения числа).
281
281
282
-
Пример:
282
+
Чтобы увидеть разницу, вот небольшой пример:
283
283
284
284
```js run
285
285
let counter = 1;
@@ -309,15 +309,15 @@ alert(a); // *!*1*/!*
309
309
let counter = 0;
310
310
counter++;
311
311
++counter;
312
-
alert( counter ); // 2, `++counter` и `counter++` просто увеличивают число
312
+
alert( counter ); // 2, обе строки сделали одно и то же
313
313
```
314
314
- Если хочется тут же использовать результат, то нужна префиксная форма:
315
315
316
316
```js run
317
317
let counter = 0;
318
318
alert( ++counter ); // 1
319
319
```
320
-
- Если нужно увеличить, но нужно значение переменной *до увеличения* – постфиксная форма:
320
+
- Если нужно увеличить, и при этом получить значение переменной *до увеличения* – постфиксная форма:
321
321
322
322
```js run
323
323
let counter = 0;
@@ -394,7 +394,7 @@ n *= 2; // теперь n=14 (работает как n = n * 2)
394
394
alert( n ); // 14
395
395
```
396
396
397
-
Так можно сделать для операторов `+,-,*,/,%` и бинарных `<<,>>,>>>,&,|,^`.
397
+
Подобные краткие формы записи существуют для всех арифметических и побитовых операторов: `/=`, `-=` и так далее.
398
398
399
399
Вызов с присваиванием имеет в точности такой же приоритет, как обычное присваивание, то есть выполнится после большинства других операций:
Оператор `,` редко используется и является одним из самых необычных. Иногда он используется для написания более короткого кода, поэтому нам нужно знать его, чтобы понимать, что происходит.
411
+
Оператор "запятая" `,` редко используется и является одним из самых необычных. Иногда он используется для написания более короткого кода, поэтому нам нужно знать его, чтобы понимать, что при этом происходит.
412
412
413
413
Оператор запятая предоставляет нам возможность вычислять несколько выражений, разделяя их запятой `,`. Каждое выражение выполняется, но возвращается результат только последнего.
```smart header="Запятая имеет очень низкий приоритет"
428
428
Пожалуйста, обратите внимание, что оператор запятая имеет очень низкий приоритет, приоритет которого ниже `=`, поэтому скобки важны в приведённом примере выше.
429
429
430
-
Без них: `a = 1 + 2, 3 + 4` сначала выполнится `+`, суммируя числа в `a = 3, 7`, затем оператор присваивания `=` присвоит `a = 3`, и в конце число не будет обработано, поэтому игнорируется.
430
+
Без них в `a = 1 + 2, 3 + 4` сначала выполнится `+`, суммируя числа в `a = 3, 7`, затем оператор присваивания `=` присвоит `a = 3`, а то что идёт дальше, будет игнорировано. Всё так же, как в `(a = 1 + 2), 3+4`.
431
431
```
432
432
433
-
Зачем нам оператор, который отбрасывает всё, кроме последней части?
433
+
Зачем нам оператор, который отбрасывает всё, кроме последнего выражения?
434
434
435
-
Обычно он используется в составе более сложных конструкций, чтобы сделать несколько действий в одной строке.
435
+
Иногда его используют в составе более сложных конструкций, чтобы сделать несколько действий в одной строке.
436
436
437
437
Например:
438
438
@@ -443,4 +443,4 @@ for (*!*a = 1, b = 3, c = a * b*/!*; a < 10; a++) {
443
443
}
444
444
```
445
445
446
-
Такие трюки используются во многих JavaScript-фреймворках. Вот почему мы упоминаем их. Но, обычно, они не улучшают читабельность кода, поэтому нам нужно сначала подумать, прежде чем их использовать.
446
+
Такие трюки используются во многих JavaScript-фреймворках. Вот почему мы упоминаем их. Но обычно они не улучшают читабельность кода, поэтому стоит хорошо подумать, прежде чем их использовать.
0 commit comments