Skip to content

Commit 39e9820

Browse files
authored
Merge pull request #1098 from vsemozhetbyt/ch-1-2-9
Update translation of 1.2.9
2 parents 23b9e52 + bea87e0 commit 39e9820

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

1-js/02-first-steps/09-comparison/1-comparison-questions/solution.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ null === +"\n0\n" → false
1313
Разъяснения:
1414

1515
1. Очевидно, `true`.
16-
2. Используется посимвольное сравнение, поэтому `false`.
16+
2. Используется посимвольное сравнение, поэтому `false`. `"а"` меньше, чем `"я"`.
1717
3. Снова посимвольное сравнение. Первый символ первой строки `"2"` больше, чем первый символ второй `"1"`.
18-
4. Специальный случай. Значения `null` и `undefined` равны друг другу при нестрогом сравнении.
18+
4. Специальный случай. Значения `null` и `undefined` равны только друг другу при нестрогом сравнении.
1919
5. Строгое сравнение разных типов, поэтому `false`.
2020
6. Аналогично `(4)`, `null` равен только `undefined`.
2121
7. Строгое сравнение разных типов.

1-js/02-first-steps/09-comparison/article.md

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
# Операторы сравнения
22

3-
Многие операторы сравнения известны нам из математики:
3+
Многие операторы сравнения известны нам из математики.
4+
5+
В JavaScript они записываются так:
46

57
- Больше/меньше: <code>a &gt; b</code>, <code>a &lt; b</code>.
68
- Больше/меньше или равно: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
7-
- Равно: `a == b`. Обратите внимание, для сравнения используется двойной знак равенства `=`. Один знак равенства `a = b` означал бы присваивание.
8-
- Не равно. В математике обозначается символом <code>&ne;</code>. В JavaScript записывается как знак равенства с предшествующим ему восклицательным знаком: <code>a != b</code>.
9+
- Равно: `a == b`. Обратите внимание, для сравнения используется двойной знак равенства `==`. Один знак равенства `a = b` означал бы присваивание.
10+
- Не равно. В математике обозначается символом <code>&ne;</code>, но в JavaScript записывается как <code>a != b</code>.
11+
12+
В этом разделе мы больше узнаем про то, какие бывают сравнения, как язык с ними работает и к каким неожиданностям мы должны быть готовы.
13+
14+
В конце вы найдёте хороший рецепт того, как избегать "причуд" сравнения в JavaScript.
915

1016
## Результат сравнения имеет логический тип
1117

12-
Операторы сравнения, как и другие операторы, возвращают значение. Это значение имеет логический тип.
18+
Все операторы сравнения возвращают значение логического типа:
1319

1420
- `true` -- означает "да", "верно", "истина".
1521
- `false` -- означает "нет", "неверно", "ложь".
@@ -39,23 +45,23 @@ alert( result ); // true
3945

4046
```js run
4147
alert( 'Я' > 'А' ); // true
42-
alert( 'Кот' > 'Код' ); // true
48+
alert( 'Коты' > 'Кода' ); // true
4349
alert( 'Сонный' > 'Сон' ); // true
4450
```
4551

4652
Алгоритм сравнения двух строк довольно прост:
4753

4854
1. Сначала сравниваются первые символы строк.
49-
2. Если первый символ первой строки больше (меньше), чем первый символ второй, то первая строка больше (меньше) второй.
55+
2. Если первый символ первой строки больше (меньше), чем первый символ второй, то первая строка больше (меньше) второй. Сравнение завершено.
5056
3. Если первые символы равны, то таким же образом сравниваются уже вторые символы строк.
5157
4. Сравнение продолжается, пока не закончится одна из строк.
5258
5. Если обе строки заканчиваются одновременно, то они равны. Иначе, большей считается более длинная строка.
5359

54-
В примерах выше сравнение `'Я' > 'А'` завершится на первом шаге, тогда как строки `"Кот"` и `"Код"` будут сравниваться посимвольно:
60+
В примерах выше сравнение `'Я' > 'А'` завершится на первом шаге, тогда как строки `'Коты'` и `'Кода'` будут сравниваться посимвольно:
5561

5662
1. `К` равна `К`.
5763
2. `о` равна `о`.
58-
3. `т` больше чем `д`. На этом сравнение заканчивается. Первая строка больше.
64+
3. `т` больше, чем `д`. На этом сравнение заканчивается. Первая строка больше.
5965

6066
```smart header="Используется кодировка Unicode, а не настоящий алфавит"
6167
Приведённый выше алгоритм сравнения похож на алгоритм, используемый в словарях и телефонных книгах, но между ними есть и различия.
@@ -134,11 +140,11 @@ alert( 0 === false ); // false, так как сравниваются разн
134140

135141
Ещё есть оператор строгого неравенства `!==`, аналогичный `!=`.
136142

137-
Оператор строгого равенства дольше писать, но он делает код более очевидным и оставляет меньше мест для ошибок.
143+
Оператор строгого равенства дольше писать, но он делает код более очевидным и оставляет меньше места для ошибок.
138144

139145
## Сравнение с null и undefined
140146

141-
Поведение `null` и `undefined` при сравнении с другими значениями - особое:
147+
Поведение `null` и `undefined` при сравнении с другими значениями особое:
142148

143149
При строгом равенстве `===`
144150
: Эти значения различны, так как различны их типы.
@@ -175,7 +181,7 @@ alert( null >= 0 ); // (3) *!*true*/!*
175181

176182
С другой стороны, для нестрогого равенства `==` значений `undefined` и `null` действует особое правило: эти значения ни к чему не приводятся, они равны друг другу и не равны ничему другому. Поэтому (2) `null == 0` ложно.
177183

178-
### Несравнимое значение undefined
184+
### Несравненное значение undefined
179185

180186
Значение `undefined` несравнимо с другими значениями:
181187

@@ -190,20 +196,19 @@ alert( undefined == 0 ); // false (3)
190196
На это есть следующие причины:
191197

192198
- Сравнения `(1)` и `(2)` возвращают `false`, потому что `undefined` преобразуется в `NaN`, а `NaN` – это специальное числовое значение, которое возвращает `false` при любых сравнениях.
193-
- Нестрогое равенство `(3)` возвращает `false`, потому что `undefined` равно только `null` и ничему больше.
199+
- Нестрогое равенство `(3)` возвращает `false`, потому что `undefined` равно только `null`, `undefined` и ничему больше.
194200

195201
### Как избежать проблем
196202

197-
Зачем мы рассмотрели все эти примеры? Должны ли мы постоянно помнить обо всех этих особенностях? Не обязательно. Со временем все они станут вам знакомы, но можно избежать проблем, если следовать простому правилу.
198-
199-
Просто относитесь к любому сравнению с `undefined/null`, кроме строгого равенства `===`, с осторожностью.
203+
Зачем мы рассмотрели все эти примеры? Должны ли мы постоянно помнить обо всех этих особенностях? Не обязательно. Со временем все они станут вам знакомы, но можно избежать проблем, если следовать надёжным правилам:
200204

201-
Не используйте сравнения `>= > < <=` с переменными, которые могут принимать значения `null/undefined`, если вы не уверены в том, что делаете. Если переменная может принимать эти значения, то добавьте для них отдельные проверки.
205+
- Относитесь очень осторожно к любому сравнению с `undefined/null`, кроме случаев строгого равенства `===`.
206+
- Не используйте сравнения `>= > < <=` с переменными, которые могут принимать значения `null/undefined`, разве что вы полностью уверены в том, что делаете. Если переменная может принимать эти значения, то добавьте для них отдельные проверки.
202207

203208
## Итого
204209

205210
- Операторы сравнения возвращают значения логического типа.
206211
- Строки сравниваются посимвольно в лексикографическом порядке.
207212
- Значения разных типов при сравнении приводятся к числу. Исключением является сравнение с помощью операторов строгого равенства/неравенства.
208213
- Значения `null` и `undefined` равны `==` друг другу и не равны любому другому значению.
209-
- Будьте осторожны при использовании операторов сравнений `>` и `<` с переменными, которые могут принимать значения `null/undefined`. Хорошей идеей будет сделать отдельную проверку на `null/undefined`.
214+
- Будьте осторожны при использовании операторов сравнений вроде `>` и `<` с переменными, которые могут принимать значения `null/undefined`. Хорошей идеей будет сделать отдельную проверку на `null/undefined`.

0 commit comments

Comments
 (0)