renovations

This commit is contained in:
Ilya Kantor 2015-02-13 18:33:55 +03:00
parent a5e8c1219f
commit 41f07253d3
21 changed files with 536 additions and 126 deletions

View file

@ -128,15 +128,16 @@ alert( +"2" > +"14" ); // false, теперь правильно
## Сравнение разных типов
При сравнении значения преобразуются к числам. Исключение: когда оба значения -- строки, тогда не преобразуются.
При сравнении значений разных типов, используется числовое преобразование. Оно применяется к обоим значениям.
Например:
```js
//+ run
alert( '2' > 1 ); // true
alert( '01' == 1 ); //true
alert( false == 0 ); // true, false становится 0, а true 1.
alert( '2' > 1 ); // true, сравнивается как 2 > 1
alert( '01' == 1 ); // true, сравнивается как 1 == 1
alert( false == 0 ); // true, false становится числом 0
alert( true == 1); // true, так как true становится числом 1.
```
Тема преобразований типов будет продолжена далее, в главе [](/types-conversion).
@ -177,12 +178,14 @@ alert(0 === false); // false, т.к. типы различны
Проблемы со специальными значениями возможны, когда к переменной применяется операция сравнения `> < <= >=`, а у неё может быть как численное значение, так и `null/undefined`.
**Интуитивно кажется, что `null/undefined` эквивалентны нулю, но это не так! Они ведут себя по-другому.**
**Интуитивно кажется, что `null/undefined` эквивалентны нулю, но это не так.**
Они ведут себя по-другому.
<ol>
<li>**Значения `null` и `undefined` равны `==` друг другу и не равны чему бы то ни было ещё.**
<li>Значения `null` и `undefined` равны `==` друг другу и не равны чему бы то ни было ещё.
Это жёсткое правило буквально прописано в спецификации языка.</li>
<li>**При преобразовании в число `null` становится `0`, а `undefined` становится `NaN`.**</li>
<li>При преобразовании в число `null` становится `0`, а `undefined` становится `NaN`.</li>
</ol>
Посмотрим забавные следствия.
@ -240,4 +243,6 @@ alert(undefined == 0); // false (3)
<li>Строки сравниваются побуквенно.</li>
<li>Значения разных типов приводятся к числу при сравнении, за исключением строгого равенства `===` (`!==`).</li>
<li>Значения `null` и `undefined` равны `==` друг другу и не равны ничему другому. В других сравнениях (с участием `>`,`<`) их лучше не использовать, так как они ведут себя не как `0`.</li>
</ul>
</ul>
Мы ещё вернёмся к теме сравнения позже, когда лучше изучим различные типы данных в JavaScript.