renovations
This commit is contained in:
parent
da4c5f87f1
commit
87a3588057
23 changed files with 287 additions and 230 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue