renovations

This commit is contained in:
Ilya Kantor 2015-01-08 02:06:13 +03:00
parent da4c5f87f1
commit 87a3588057
23 changed files with 287 additions and 230 deletions

View file

@ -84,9 +84,15 @@ alert( '1' + 2 ); // "12"
alert( 2 + '1' ); // "21"
```
Это приведение к строке -- особенность бинарного оператора `"+"`.
[smart]
Для сложения строк в программировании используется специальный термин "конкатенация" (от англ. concat).
**Остальные арифметические операторы работают только с числами и всегда приводят аргументы к числу.**
В примерах выше оператор `'+'` производил конкатенацию строк.
[/smart]
**Это приведение к строке -- особенность исключительно бинарного оператора `"+"`.**
Остальные арифметические операторы работают только с числами и всегда приводят аргументы к числу.
Например:
@ -110,7 +116,9 @@ alert( +(1-2) ); // -1
Тем не менее, он широко применяется, так как его "побочный эффект" -- преобразование значения в число.
Например, у нас есть два числа, в форме строк, и нужно их сложить. Бинарный плюс сложит их как строки, поэтому используем унарный плюс, чтобы преобразовать к числу:
Например, когда мы получаем значения из HTML-полей или от пользователя, то они обычно в форме строк.
А что, если их нужно сложить? Бинарный плюс сложит их как строки:
```js
//+ run
@ -118,9 +126,16 @@ var a = "2";
var b = "3";
alert( a + b ); // "23", так как бинарный плюс складывает строки
alert( +a + b ); // "23", второй операнд - всё ещё строка
```
alert( +a + +b); // 5, число, так как оба операнда предварительно преобразованы в числа
Поэтому используем унарный плюс, чтобы преобразовать к числу:
```js
//+ run
var a = "2";
var b = "3";
alert( +a + +b); // 5, число, оба операнда предварительно преобразованы в числа
```
## Присваивание
@ -263,7 +278,7 @@ var a = ++i; // (*)
alert(a); // *!*2*/!*
```
В строке `(*)` вызов `++i` увеличит переменную, а *затем* вернёт ее значение в `a`. **То есть, в `a` попадёт значение `i` *после* увеличения**.
В строке `(*)` вызов `++i` увеличит переменную, а *затем* вернёт ее значение в `a`. Так что в `a` попадёт значение `i` *после* увеличения.
**Постфиксная форма `i++` отличается от префиксной `++i` тем, что возвращает старое значение, бывшее до увеличения.**
@ -327,7 +342,9 @@ var i = 1;
alert( 2 * i++ ); // 2, выполнился раньше но значение вернул старое
```
При этом, нужно с осторожностью использовать такую запись, потому что при чтении кода зачастую неочевидно, что переменая увеличивается. Три строки -- длиннее, зато нагляднее:
При этом, нужно с осторожностью использовать такую запись, потому что в более длинной строке при быстром "вертикальном" чтении кода легко пропустить такой `i++`, и будет неочевидно, что переменая увеличивается.
Три строки, по одному действию в каждой -- длиннее, зато нагляднее:
```js
//+ run