Skip to content

Commit 6ac9e3a

Browse files
committed
renovations
1 parent dcecced commit 6ac9e3a

File tree

182 files changed

+275
-324
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

182 files changed

+275
-324
lines changed

1-js/2-first-steps/13-logical-ops/article.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
result = a || b;
1414
```
1515

16-
**Логическое ИЛИ в классическом программировании работает следующим образом: "если *хотя бы один* из аргументов `true`, то возвращает `true`, иначе -- `false`".**
16+
Логическое ИЛИ в классическом программировании работает следующим образом: "если *хотя бы один* из аргументов `true`, то возвращает `true`, иначе -- `false`". В JavaScript, как мы увидим далее, это не совсем так, но для начала рассмотрим только логические значения.
1717

1818
Получается следующая "таблица результатов":
1919

@@ -25,7 +25,7 @@ alert( true || false); // true
2525
alert( false || false); // false
2626
```
2727

28-
Если значение не логического типа -- то оно к нему приводится. Например, число `1` будет воспринято как `true`, а `0` -- как `false`:
28+
Если значение не логического типа -- то оно к нему приводится в целях вычислений. Например, число `1` будет воспринято как `true`, а `0` -- как `false`:
2929

3030
```js
3131
//+ run
@@ -129,6 +129,9 @@ alert(result); // выведет "Привет!" - первое значение
129129
alert(undefined || '' || false || 0); // 0
130130
```
131131

132+
[summary]
133+
Итак, оператор `||` вычисляет операнды слева направо до первого "истинного" и возвращает его, а если все ложные -- то последнее значение.
134+
[/summary]
132135

133136
## && (И)
134137

@@ -171,7 +174,7 @@ if ( 1 && 0 ) { // вычислится как true && false
171174

172175
К И применим тот же принцип "короткого цикла вычислений", но немного по-другому, чем к ИЛИ.
173176

174-
**Если левый аргумент -- `false`, оператор И возвращает его и заканчивает вычисления. Иначе -- вычисляет и возвращает правый аргумент.**
177+
Если левый аргумент -- `false`, оператор И возвращает его и заканчивает вычисления. Иначе -- вычисляет и возвращает правый аргумент.
175178

176179
Например:
177180

@@ -197,15 +200,20 @@ alert(1 && 2 && null && 3); // null
197200
alert(1 && 2 && 3); // 3
198201
```
199202

200-
**Приоритет оператора И `&&` больше, чем ИЛИ `||`, т.е. он выполняется раньше.**
203+
[summary]
204+
Итак, оператор `&&` вычисляет операнды слева направо до первого "ложного" и возвращает его, а если все истинные -- то последнее значение.
205+
[/summary]
206+
207+
[smart header="Приоритет у `&&` больше, чем у `||`"]
208+
Приоритет оператора И `&&` больше, чем ИЛИ `||`, так что он выполняется раньше.
201209

202210
Поэтому в следующем коде сначала будет вычислено правое И: `1 && 0 = 0`, а уже потом -- ИЛИ.
203211

204212
```js
205213
//+ run
206214
alert(5 || 1 && 0); // 5
207215
```
208-
216+
[/smart]
209217

210218
[warn header="Не используйте `&&` вместо `if`"]
211219

1-js/2-first-steps/8-operators/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ alert( +apples + +oranges); // 5, число, оба операнда предв
135135
<tr><td>5</td><td>деление</td><td>`/`</td></tr>
136136
<tr><td>6</td><td>сложение</td><td>`+`</td></tr>
137137
<tr><td>6</td><td>вычитание</td><td>`-`</td></tr>
138-
<tr><td>17</td><td>присвоение</td><td>`=`</td></tr>
138+
<tr><td>3</td><td>присвоение</td><td>`=`</td></tr>
139139
<tr><td>...</td><td>...</td><td>...</td></tr>
140140
</table>
141141

@@ -145,7 +145,7 @@ alert( +apples + +oranges); // 5, число, оба операнда предв
145145

146146
Обратим внимание, в таблице приоритетов также есть оператор присваивания `=`.
147147

148-
У него -- один из самых низких приоритетов: `17`.
148+
У него -- один из самых низких приоритетов: `3`.
149149

150150
Именно поэтому, когда переменную чему-либо присваивают, например, `x = 2 * 2 + 1` сначала выполнится арифметика, а уже затем -- произойдёт присвоение `=`.
151151

1-js/4-data-structures/2-number/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ alert(number); // Infinity, плюс преобразовал строку "Infi
161161

162162
Обычно если мы хотим от посетителя получить число, то `Infinity` или `NaN` нам не подходят. Для того, чтобы отличить "обычные" числа от таких специальных значений, существует функция `isFinite`.
163163

164-
**Функция `isFinite(n)` возвращает `true` только тогда, когда `n` -- обычное число, а не одно из этих значений:**
164+
**Функция `isFinite(n)` преобразует аргумент к числу и возвращает `true`, если это не `NaN/Infinity/-Infinity`:**
165165

166166
```js
167167
//+ run

1-js/7-js-misc/3-setTimeout-setInterval/article.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,14 @@ setTimeout(function() {}, 100);
245245
В Internet Explorer, нулевая задержка `setInterval(.., 0)` не сработает. Это касается именно `setInterval`, т.е. `setTimeout(.., 0)` работает нормально.
246246
[/warn]
247247

248+
[smart header="Откуда взялись эти 4мс?"]
249+
Почему минимальная задержка -- 4мс, а не 1мс? Зачем она вообще существует?
250+
251+
Это -- "привет" от прошлого. Браузер Chrome как-то пытался убрать минимальную задержку в своих ранних версиях, но оказалось, что существуют сайты, которые используют `setTimeout(..,0)` рекурсивно, создавая тем самым "асинхронный цикл". И, если задержку совсем убрать, то будет 100% загрузка процессора, такой сайт "подвесит" браузер.
252+
253+
Поэтому, чтобы не ломать существующие скрипты, решили сделать задержку. По возможности, небольшую. На время создания стандарта оптимальным числом показались 4мс.
254+
[/smart]
255+
248256
## Реальная частота срабатывания
249257

250258
В ряде ситуаций таймер будет срабатывать реже, чем обычно. Задержка между вызовами `setInterval(..., 4)` может быть не 4мс, а 30мс или даже 1000мс.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Интернационализация, встроенные объекты Intl
1+
# Intl: интернационализация в JavaScript
22

3-
Общая проблема строк, дат, чисел в JavaScript -- они совершенно не в курсе языков и стран, где находится посетитель.
3+
Общая проблема строк, дат, чисел в JavaScript -- они "не в курсе" языка и особенностей стран, где находится посетитель.
44

55
В частности:
66
<dl>
@@ -12,7 +12,7 @@
1212
<dd>В одних странах выводятся цифрами, в других -- иероглифами, длинные числа разделяются где-то пробелом, где-то запятой.</dd>
1313
</dl>
1414

15-
Все современные браузеры, кроме IE10- (но есть библиотеки и для него) поддерживает стандарт [ECMA 402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf), предназначенный решить эти проблемы навсегда.
15+
Все современные браузеры, кроме IE10- (но есть библиотеки и для него) поддерживают стандарт [ECMA 402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf), предназначенный решить эти проблемы навсегда.
1616

1717
[cut]
1818

0 commit comments

Comments
 (0)