beautify 1st part of the tutorial
This commit is contained in:
parent
e3dd2cedc0
commit
6444024a9d
327 changed files with 2358 additions and 1986 deletions
|
@ -4,16 +4,19 @@
|
||||||
<!--+ run -->
|
<!--+ run -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
alert('Я - JavaScript!');
|
alert( 'Я - JavaScript!' );
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -16,23 +16,25 @@
|
||||||
<!--+ run height=100 -->
|
<!--+ run height=100 -->
|
||||||
<!DOCTYPE HTML>
|
<!DOCTYPE HTML>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<!-- Тег meta для указания кодировки -->
|
<!-- Тег meta для указания кодировки -->
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<p>Начало документа...</p>
|
<p>Начало документа...</p>
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
<script>
|
<script>
|
||||||
alert('Привет, Мир!');
|
alert( 'Привет, Мир!' );
|
||||||
</script>
|
</script>
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
<p>...Конец документа</p>
|
<p>...Конец документа</p>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -88,6 +90,7 @@
|
||||||
Выглядит это примерно так:
|
Выглядит это примерно так:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
|
<!--+ no-beautify -->
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
...
|
...
|
||||||
//--></script>
|
//--></script>
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
Примеры представления чисел в двоичной системе:
|
Примеры представления чисел в двоичной системе:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
a = 0; // 00000000000000000000000000000000
|
a = 0; // 00000000000000000000000000000000
|
||||||
a = 1; // 00000000000000000000000000000001
|
a = 1; // 00000000000000000000000000000001
|
||||||
a = 2; // 00000000000000000000000000000010
|
a = 2; // 00000000000000000000000000000010
|
||||||
|
@ -137,11 +138,11 @@ a = 255;// 00000000000000000000000011111111
|
||||||
//+ run
|
//+ run
|
||||||
var access = parseInt("11000", 2); // получаем число из строки
|
var access = parseInt("11000", 2); // получаем число из строки
|
||||||
|
|
||||||
alert(access); // 24, число с таким 2-ным представлением
|
alert( access ); // 24, число с таким 2-ным представлением
|
||||||
|
|
||||||
var access2 = access.toString(2); // обратно двоичную строку из числа
|
var access2 = access.toString(2); // обратно двоичную строку из числа
|
||||||
|
|
||||||
alert(access2); // 11000
|
alert( access2 ); // 11000
|
||||||
```
|
```
|
||||||
|
|
||||||
Без них перевод в двоичную систему и обратно был бы куда менее удобен.
|
Без них перевод в двоичную систему и обратно был бы куда менее удобен.
|
||||||
|
@ -167,6 +168,7 @@ alert(access2); // 11000
|
||||||
Пример:
|
Пример:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
9 (по осн. 10)
|
9 (по осн. 10)
|
||||||
= 00000000000000000000000000001001 (по осн. 2)
|
= 00000000000000000000000000001001 (по осн. 2)
|
||||||
14 (по осн. 10)
|
14 (по осн. 10)
|
||||||
|
@ -194,6 +196,7 @@ alert(access2); // 11000
|
||||||
Пример:
|
Пример:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
9 (по осн. 10)
|
9 (по осн. 10)
|
||||||
= 00000000000000000000000000001001 (по осн. 2)
|
= 00000000000000000000000000001001 (по осн. 2)
|
||||||
14 (по осн. 10)
|
14 (по осн. 10)
|
||||||
|
@ -225,6 +228,7 @@ alert(access2); // 11000
|
||||||
Пример:
|
Пример:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
9 (по осн. 10)
|
9 (по осн. 10)
|
||||||
= 00000000000000000000000000001001 (по осн. 2)
|
= 00000000000000000000000000001001 (по осн. 2)
|
||||||
14 (по осн. 10)
|
14 (по осн. 10)
|
||||||
|
@ -253,6 +257,7 @@ alert(access2); // 11000
|
||||||
Например, пусть в `data` очередное число равно `9`, а ключ `key` равен `1220461917`.
|
Например, пусть в `data` очередное число равно `9`, а ключ `key` равен `1220461917`.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
Данные: 9 в двоичном виде
|
Данные: 9 в двоичном виде
|
||||||
00000000000000000000000000001001
|
00000000000000000000000000001001
|
||||||
|
|
||||||
|
@ -273,6 +278,7 @@ alert(access2); // 11000
|
||||||
В нашем случае:
|
В нашем случае:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
Полученная шифровка в двоичной системе:
|
Полученная шифровка в двоичной системе:
|
||||||
9 ^ key = 1220461908
|
9 ^ key = 1220461908
|
||||||
01001000101111101100010101010100
|
01001000101111101100010101010100
|
||||||
|
@ -305,6 +311,7 @@ alert(access2); // 11000
|
||||||
Пример:
|
Пример:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
9 (по осн. 10)
|
9 (по осн. 10)
|
||||||
= 00000000000000000000000000001001 (по осн. 2)
|
= 00000000000000000000000000001001 (по осн. 2)
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
@ -319,8 +326,8 @@ alert(access2); // 11000
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(~3); // -4
|
alert( ~3 ); // -4
|
||||||
alert(~-1); // 0
|
alert( ~-1 ); // 0
|
||||||
```
|
```
|
||||||
|
|
||||||
### << (Битовый сдвиг влево)
|
### << (Битовый сдвиг влево)
|
||||||
|
@ -332,6 +339,7 @@ alert(~-1); // 0
|
||||||
Например, `9 << 2` даст `36`:
|
Например, `9 << 2` даст `36`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
|
|
||||||
9 (по осн.10)
|
9 (по осн.10)
|
||||||
= 00000000000000000000000000001001 (по осн.2)
|
= 00000000000000000000000000001001 (по осн.2)
|
||||||
|
@ -356,7 +364,7 @@ alert( 3 << 3 ); // 24, умножение на 2 три раза
|
||||||
Конечно, следует иметь в виду, что побитовые операторы работают только с 32-битными числами, поэтому верхний порог такого "умножения" ограничен:
|
Конечно, следует иметь в виду, что побитовые операторы работают только с 32-битными числами, поэтому верхний порог такого "умножения" ограничен:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
*!*
|
*!*
|
||||||
alert(10000000000 << 1); // -1474836480, отброшен крайний-левый бит
|
alert(10000000000 << 1); // -1474836480, отброшен крайний-левый бит
|
||||||
*/!*
|
*/!*
|
||||||
|
@ -376,6 +384,7 @@ alert(10000000000 * 2); // 20000000000, обычное умножение
|
||||||
Например, `9 >> 2` даст <code>2</code>:
|
Например, `9 >> 2` даст <code>2</code>:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
9 (по осн.10)
|
9 (по осн.10)
|
||||||
= 00000000000000000000000000001001 (по осн.2)
|
= 00000000000000000000000000001001 (по осн.2)
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
@ -389,6 +398,7 @@ alert(10000000000 * 2); // 20000000000, обычное умножение
|
||||||
Аналогично, `-9 >> 2` даст `-3`:
|
Аналогично, `-9 >> 2` даст `-3`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
-9 (по осн.10)
|
-9 (по осн.10)
|
||||||
= 11111111111111111111111111110111 (по осн.2)
|
= 11111111111111111111111111110111 (по осн.2)
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
@ -422,6 +432,7 @@ alert( 100 >> 3 ); // 12, деление на 2 три раза, целая ча
|
||||||
Для отрицательных чисел -- результат работы разный. Например, `-9 >>> 2` даст `1073741821`, в отличие от `-9 >> 2` (дает `-3`):
|
Для отрицательных чисел -- результат работы разный. Например, `-9 >>> 2` даст `1073741821`, в отличие от `-9 >> 2` (дает `-3`):
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
-9 (по осн.10)
|
-9 (по осн.10)
|
||||||
= 11111111111111111111111111110111 (по осн.2)
|
= 11111111111111111111111111110111 (по осн.2)
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
@ -559,6 +570,7 @@ alert( 100 >> 3 ); // 12, деление на 2 три раза, целая ча
|
||||||
Как правило, доступы задаются в виде констант:
|
Как правило, доступы задаются в виде констант:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
var ACCESS_ADMIN = 1; // 00001
|
var ACCESS_ADMIN = 1; // 00001
|
||||||
var ACCESS_GOODS_EDIT = 2; // 00010
|
var ACCESS_GOODS_EDIT = 2; // 00010
|
||||||
var ACCESS_GOODS_VIEW = 4; // 00100
|
var ACCESS_GOODS_VIEW = 4; // 00100
|
||||||
|
@ -592,7 +604,7 @@ alert(editor & ACCESS_ARTICLE_EDIT); // 8, доступ есть
|
||||||
```js
|
```js
|
||||||
var check = ACCESS_GOODS_VIEW | ACCESS_GOODS_EDIT; // 6, 00110
|
var check = ACCESS_GOODS_VIEW | ACCESS_GOODS_EDIT; // 6, 00110
|
||||||
|
|
||||||
alert(admin & check); // не 0, значит есть доступ к просмотру ИЛИ изменению
|
alert( admin & check ); // не 0, значит есть доступ к просмотру ИЛИ изменению
|
||||||
```
|
```
|
||||||
|
|
||||||
*Битовой маской* называют как раз комбинацию двоичных значений (`check` в примере выше), которая используется для проверки и выборки единиц на нужных позициях.
|
*Битовой маской* называют как раз комбинацию двоичных значений (`check` в примере выше), которая используется для проверки и выборки единиц на нужных позициях.
|
||||||
|
@ -626,14 +638,14 @@ alert( ~~12.345 ); // 12
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( 12.345^0 ); // 12
|
alert( 12.345 ^ 0 ); // 12
|
||||||
```
|
```
|
||||||
|
|
||||||
Последнее даже более удобно, поскольку отлично читается:
|
Последнее даже более удобно, поскольку отлично читается:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( 12.3 * 14.5 ^ 0); // (=178) "12.3 умножить на 14.5 *!*и округлить*/!*"
|
alert(12.3 * 14.5 ^ 0); // (=178) "12.3 умножить на 14.5 *!*и округлить*/!*"
|
||||||
```
|
```
|
||||||
|
|
||||||
У побитовых операторов достаточно низкий приоритет, он меньше чем у остальной арифметики:
|
У побитовых операторов достаточно низкий приоритет, он меньше чем у остальной арифметики:
|
||||||
|
@ -656,7 +668,7 @@ alert( 1.1 + 1.2 ^ 0 ); // 2, сложение выполнится раньше
|
||||||
var n = 5;
|
var n = 5;
|
||||||
|
|
||||||
if (~n) { // сработает, т.к. ~n = -(5+1) = -6
|
if (~n) { // сработает, т.к. ~n = -(5+1) = -6
|
||||||
alert("n не -1"); // выведет!
|
alert( "n не -1" ); // выведет!
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -667,7 +679,7 @@ if (~n) { // сработает, т.к. ~n = -(5+1) = -6
|
||||||
var n = -1;
|
var n = -1;
|
||||||
|
|
||||||
if (~n) { // не сработает, т.к. ~n = -(-1+1) = 0
|
if (~n) { // не сработает, т.к. ~n = -(-1+1) = 0
|
||||||
alert("...ничего не выведет...");
|
alert( "...ничего не выведет..." );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -678,7 +690,7 @@ if (~n) { // не сработает, т.к. ~n = -(-1+1) = 0
|
||||||
var str = "Проверка";
|
var str = "Проверка";
|
||||||
|
|
||||||
if (~str.indexOf("верка")) { // Сочетание "if (~...indexOf)" читается как "если найдено"
|
if (~str.indexOf("верка")) { // Сочетание "if (~...indexOf)" читается как "если найдено"
|
||||||
alert('найдено!');
|
alert( 'найдено!' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ JS-код:
|
||||||
```js
|
```js
|
||||||
//+ demo run
|
//+ demo run
|
||||||
var name = prompt("Ваше имя?", "");
|
var name = prompt("Ваше имя?", "");
|
||||||
alert(name);
|
alert( name );
|
||||||
```
|
```
|
||||||
|
|
||||||
Полная страница:
|
Полная страница:
|
||||||
|
@ -11,17 +11,20 @@ alert(name);
|
||||||
```html
|
```html
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var name = prompt("Ваше имя?", "");
|
var name = prompt("Ваше имя?", "");
|
||||||
alert(name);
|
alert( name );
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ alert(сообщение)
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert("Привет");
|
alert( "Привет" );
|
||||||
```
|
```
|
||||||
|
|
||||||
Окно сообщения, которое выводится, является *модальным окном*. Слово "модальное" означает, что посетитель не может взаимодействовать со страницей, нажимать другие кнопки и т.п., пока не разберется с окном. В данном случае - пока не нажмет на "OK".
|
Окно сообщения, которое выводится, является *модальным окном*. Слово "модальное" означает, что посетитель не может взаимодействовать со страницей, нажимать другие кнопки и т.п., пока не разберется с окном. В данном случае - пока не нажмет на "OK".
|
||||||
|
@ -25,6 +25,7 @@ alert("Привет");
|
||||||
Функция prompt принимает два аргумента:
|
Функция prompt принимает два аргумента:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
result = prompt(title, default);
|
result = prompt(title, default);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -87,7 +88,7 @@ result = confirm(question);
|
||||||
//+ run
|
//+ run
|
||||||
var isAdmin = confirm("Вы - администратор?");
|
var isAdmin = confirm("Вы - администратор?");
|
||||||
|
|
||||||
alert(isAdmin);
|
alert( isAdmin );
|
||||||
```
|
```
|
||||||
|
|
||||||
## Особенности встроенных функций
|
## Особенности встроенных функций
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
if ("0") {
|
if ("0") {
|
||||||
alert('Привет');
|
alert( 'Привет' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
if ("0") {
|
if ("0") {
|
||||||
alert('Привет');
|
alert( 'Привет' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
var value = prompt('Введите число', 0);
|
var value = prompt('Введите число', 0);
|
||||||
|
|
||||||
if (value > 0) {
|
if (value > 0) {
|
||||||
alert(1);
|
alert( 1 );
|
||||||
} else if (value < 0) {
|
} else if (value < 0) {
|
||||||
alert(-1);
|
alert( -1 );
|
||||||
} else {
|
} else {
|
||||||
alert(0);
|
alert( 0 );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -4,24 +4,24 @@
|
||||||
//+ run demo
|
//+ run demo
|
||||||
var userName = prompt('Кто пришёл?', '');
|
var userName = prompt('Кто пришёл?', '');
|
||||||
|
|
||||||
if ( userName == 'Админ' ) {
|
if (userName == 'Админ') {
|
||||||
|
|
||||||
var pass = prompt('Пароль?', '');
|
var pass = prompt('Пароль?', '');
|
||||||
|
|
||||||
if ( pass == 'Чёрный Властелин' ) {
|
if (pass == 'Чёрный Властелин') {
|
||||||
alert('Добро пожаловать!');
|
alert( 'Добро пожаловать!' );
|
||||||
} else if ( pass == null ) { // (*)
|
} else if (pass == null) { // (*)
|
||||||
alert('Вход отменён');
|
alert( 'Вход отменён' );
|
||||||
} else {
|
} else {
|
||||||
alert('Пароль неверен');
|
alert( 'Пароль неверен' );
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if ( userName == null ) { // (**)
|
} else if (userName == null) { // (**)
|
||||||
alert('Вход отменён');
|
alert( 'Вход отменён' );
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
alert('Я вас не знаю');
|
alert( 'Я вас не знаю' );
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
//+ run
|
//+ run
|
||||||
var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');
|
var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');
|
||||||
|
|
||||||
if (year != 2011) alert('А вот и неправильно!');
|
if (year != 2011) alert( 'А вот и неправильно!' );
|
||||||
```
|
```
|
||||||
|
|
||||||
## Оператор if
|
## Оператор if
|
||||||
|
@ -19,8 +19,8 @@ if (year != 2011) alert('А вот и неправильно!');
|
||||||
|
|
||||||
```js
|
```js
|
||||||
if (year != 2011) {
|
if (year != 2011) {
|
||||||
alert('А вот..');
|
alert( 'А вот..' );
|
||||||
alert('..и неправильно!');
|
alert( '..и неправильно!' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -74,9 +74,9 @@ if (cond) {
|
||||||
var year = prompt('Введите год появления стандарта ECMA-262 5.1', '');
|
var year = prompt('Введите год появления стандарта ECMA-262 5.1', '');
|
||||||
|
|
||||||
if (year == 2011) {
|
if (year == 2011) {
|
||||||
alert('Да вы знаток!');
|
alert( 'Да вы знаток!' );
|
||||||
} else {
|
} else {
|
||||||
alert('А вот и неправильно!'); // любое значение, кроме 2011
|
alert( 'А вот и неправильно!' ); // любое значение, кроме 2011
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -89,11 +89,11 @@ if (year == 2011) {
|
||||||
var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');
|
var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');
|
||||||
|
|
||||||
if (year < 2011) {
|
if (year < 2011) {
|
||||||
alert('Это слишком рано..');
|
alert( 'Это слишком рано..' );
|
||||||
} else if (year > 2011) {
|
} else if (year > 2011) {
|
||||||
alert('Это поздновато..');
|
alert( 'Это поздновато..' );
|
||||||
} else {
|
} else {
|
||||||
alert('Да, точно в этом году!');
|
alert( 'Да, точно в этом году!' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ if (year < 2011) {
|
||||||
Иногда нужно в зависимости от условия присвоить переменную. Например:
|
Иногда нужно в зависимости от условия присвоить переменную. Например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var access;
|
var access;
|
||||||
var age = prompt('Сколько вам лет?', '');
|
var age = prompt('Сколько вам лет?', '');
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ var message = (age < 3) ? 'Здравствуй, малыш!' :
|
||||||
(age < 100) ? 'Здравствуйте!' :
|
(age < 100) ? 'Здравствуйте!' :
|
||||||
'Какой необычный возраст!';
|
'Какой необычный возраст!';
|
||||||
|
|
||||||
alert(message);
|
alert( message );
|
||||||
```
|
```
|
||||||
|
|
||||||
Поначалу может быть сложно понять, что происходит. Однако, внимательно приглядевшись, мы замечаем, что это обычная последовательная проверка!
|
Поначалу может быть сложно понять, что происходит. Однако, внимательно приглядевшись, мы замечаем, что это обычная последовательная проверка!
|
||||||
|
@ -195,7 +195,7 @@ if (age < 3) {
|
||||||
Иногда оператор вопросительный знак `'?'` используют как замену `if`:
|
Иногда оператор вопросительный знак `'?'` используют как замену `if`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var company = prompt('Какая компания создала JavaScript?', '');
|
var company = prompt('Какая компания создала JavaScript?', '');
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
|
@ -215,7 +215,7 @@ var company = prompt('Какая компания создала JavaScript?', '
|
||||||
Вот, для сравнения, то же самое с `if`:
|
Вот, для сравнения, то же самое с `if`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var company = prompt('Какая компания создала JavaScript?', '');
|
var company = prompt('Какая компания создала JavaScript?', '');
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Первый вариант:
|
Первый вариант:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
if ( !(age >= 14 && age <= 90) )
|
if (!(age >= 14 && age <= 90))
|
||||||
```
|
```
|
||||||
|
|
||||||
Второй вариант:
|
Второй вариант:
|
||||||
|
|
|
@ -6,16 +6,16 @@
|
||||||
//+ run
|
//+ run
|
||||||
// Выполнится
|
// Выполнится
|
||||||
// Результат -1 || 0 = -1, в логическом контексте true
|
// Результат -1 || 0 = -1, в логическом контексте true
|
||||||
if (-1 || 0) alert('первое');
|
if (-1 || 0) alert( 'первое' );
|
||||||
|
|
||||||
// Не выполнится
|
// Не выполнится
|
||||||
// -1 && 0 = 0, в логическом контексте false
|
// -1 && 0 = 0, в логическом контексте false
|
||||||
if (-1 && 0) alert('второе');
|
if (-1 && 0) alert( 'второе' );
|
||||||
|
|
||||||
// Выполнится
|
// Выполнится
|
||||||
// оператор && имеет больший приоритет, чем ||
|
// оператор && имеет больший приоритет, чем ||
|
||||||
// так что -1 && 1 выполнится раньше
|
// так что -1 && 1 выполнится раньше
|
||||||
// вычисления: null || -1 && 1 -> null || 1 -> 1
|
// вычисления: null || -1 && 1 -> null || 1 -> 1
|
||||||
if (null || -1 && 1) alert('третье');
|
if (null || -1 && 1) alert( 'третье' );
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
Какие конкретно значения будут результатами выражений в условиях `if(...)`?
|
Какие конкретно значения будут результатами выражений в условиях `if(...)`?
|
||||||
|
|
||||||
```js
|
```js
|
||||||
if (-1 || 0) alert('первое');
|
if (-1 || 0) alert( 'первое' );
|
||||||
if (-1 && 0) alert('второе');
|
if (-1 && 0) alert( 'второе' );
|
||||||
if (null || -1 && 1) alert('третье');
|
if (null || -1 && 1) alert( 'третье' );
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -21,16 +21,16 @@ result = a || b;
|
||||||
//+ run
|
//+ run
|
||||||
alert( true || true ); // true
|
alert( true || true ); // true
|
||||||
alert( false || true ); // true
|
alert( false || true ); // true
|
||||||
alert( true || false); // true
|
alert( true || false ); // true
|
||||||
alert( false || false); // false
|
alert( false || false ); // false
|
||||||
```
|
```
|
||||||
|
|
||||||
Если значение не логического типа -- то оно к нему приводится в целях вычислений. Например, число `1` будет воспринято как `true`, а `0` -- как `false`:
|
Если значение не логического типа -- то оно к нему приводится в целях вычислений. Например, число `1` будет воспринято как `true`, а `0` -- как `false`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
if ( 1 || 0 ) { // сработает как if( true || false )
|
if (1 || 0) { // сработает как if( true || false )
|
||||||
alert('верно');
|
alert( 'верно' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ var hour = 9;
|
||||||
*!*
|
*!*
|
||||||
if (hour < 10 || hour > 18) {
|
if (hour < 10 || hour > 18) {
|
||||||
*/!*
|
*/!*
|
||||||
alert('Офис до 10 или после 18 закрыт');
|
alert( 'Офис до 10 или после 18 закрыт' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -51,10 +51,11 @@ if (hour < 10 || hour > 18) {
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var hour = 12, isWeekend = true;
|
var hour = 12,
|
||||||
|
isWeekend = true;
|
||||||
|
|
||||||
if (hour < 10 || hour > 18 || isWeekend) {
|
if (hour < 10 || hour > 18 || isWeekend) {
|
||||||
alert('Офис до 10 или после 18 или в выходной закрыт');
|
alert( 'Офис до 10 или после 18 или в выходной закрыт' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ JavaScript вычисляет несколько ИЛИ слева направ
|
||||||
При запуске примера ниже присвоение `x` не произойдёт:
|
При запуске примера ниже присвоение `x` не произойдёт:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var x;
|
var x;
|
||||||
|
|
||||||
*!*true*/!* || (x = 1);
|
*!*true*/!* || (x = 1);
|
||||||
|
@ -80,7 +81,7 @@ alert(x); // undefined, x не присвоен
|
||||||
...А в примере ниже первый аргумент -- `false`, так что ИЛИ попытается вычислить второй, запустив тем самым присваивание:
|
...А в примере ниже первый аргумент -- `false`, так что ИЛИ попытается вычислить второй, запустив тем самым присваивание:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var x;
|
var x;
|
||||||
|
|
||||||
*!*false*/!* || (x = 1);
|
*!*false*/!* || (x = 1);
|
||||||
|
@ -99,7 +100,7 @@ alert(x); // 1
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( 1 || 0 ); // 1
|
alert( 1 || 0 ); // 1
|
||||||
alert( true || 'неважно что'); // true
|
alert( true || 'неважно что' ); // true
|
||||||
|
|
||||||
alert( null || 1 ); // 1
|
alert( null || 1 ); // 1
|
||||||
alert( undefined || 0 ); // 0
|
alert( undefined || 0 ); // 0
|
||||||
|
@ -118,15 +119,14 @@ var msg = "Привет!";
|
||||||
var result = undef || zero || emptyStr || msg || 0;
|
var result = undef || zero || emptyStr || msg || 0;
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(result); // выведет "Привет!" - первое значение, которое является true
|
alert( result ); // выведет "Привет!" - первое значение, которое является true
|
||||||
```
|
```
|
||||||
|
|
||||||
Если все значения "ложные", то `||` возвратит последнее из них:
|
Если все значения "ложные", то `||` возвратит последнее из них:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
|
alert( undefined || '' || false || 0 ); // 0
|
||||||
alert(undefined || '' || false || 0); // 0
|
|
||||||
```
|
```
|
||||||
|
|
||||||
[summary]
|
[summary]
|
||||||
|
@ -148,18 +148,19 @@ result = a && b;
|
||||||
//+ run
|
//+ run
|
||||||
alert( true && true ); // true
|
alert( true && true ); // true
|
||||||
alert( false && true ); // false
|
alert( false && true ); // false
|
||||||
alert( true && false); // false
|
alert( true && false ); // false
|
||||||
alert( false && false); // false
|
alert( false && false ); // false
|
||||||
```
|
```
|
||||||
|
|
||||||
Пример c `if`:
|
Пример c `if`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var hour = 12, minute = 30;
|
var hour = 12,
|
||||||
|
minute = 30;
|
||||||
|
|
||||||
if (hour == 12 && minute == 30) {
|
if (hour == 12 && minute == 30) {
|
||||||
alert('Время 12:30');
|
alert( 'Время 12:30' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -167,8 +168,8 @@ if (hour == 12 && minute == 30) {
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
if ( 1 && 0 ) { // вычислится как true && false
|
if (1 && 0) { // вычислится как true && false
|
||||||
alert('не сработает, т.к. условие ложно');
|
alert( 'не сработает, т.к. условие ложно' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -182,22 +183,22 @@ if ( 1 && 0 ) { // вычислится как true && false
|
||||||
//+ run
|
//+ run
|
||||||
// Первый аргумент - true,
|
// Первый аргумент - true,
|
||||||
// Поэтому возвращается второй аргумент
|
// Поэтому возвращается второй аргумент
|
||||||
alert(1 && 0); // 0
|
alert( 1 && 0 ); // 0
|
||||||
alert(1 && 5); // 5
|
alert( 1 && 5 ); // 5
|
||||||
|
|
||||||
// Первый аргумент - false,
|
// Первый аргумент - false,
|
||||||
// Он и возвращается, а второй аргумент игнорируется
|
// Он и возвращается, а второй аргумент игнорируется
|
||||||
alert(null && 5); // null
|
alert( null && 5 ); // null
|
||||||
alert(0 && "не важно"); // 0
|
alert( 0 && "не важно" ); // 0
|
||||||
```
|
```
|
||||||
|
|
||||||
Можно передать и несколько значений подряд, при этом возвратится первое "ложное" (на котором остановились вычисления), а если его нет -- то последнее:
|
Можно передать и несколько значений подряд, при этом возвратится первое "ложное" (на котором остановились вычисления), а если его нет -- то последнее:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(1 && 2 && null && 3); // null
|
alert( 1 && 2 && null && 3 ); // null
|
||||||
|
|
||||||
alert(1 && 2 && 3); // 3
|
alert( 1 && 2 && 3 ); // 3
|
||||||
```
|
```
|
||||||
|
|
||||||
[summary]
|
[summary]
|
||||||
|
@ -211,7 +212,7 @@ alert(1 && 2 && 3); // 3
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(5 || 1 && 0); // 5
|
alert( 5 || 1 && 0 ); // 5
|
||||||
```
|
```
|
||||||
[/smart]
|
[/smart]
|
||||||
|
|
||||||
|
@ -223,7 +224,7 @@ alert(5 || 1 && 0); // 5
|
||||||
//+ run
|
//+ run
|
||||||
var x = 1;
|
var x = 1;
|
||||||
|
|
||||||
(x > 0) && alert('Больше');
|
(x > 0) && alert( 'Больше' );
|
||||||
```
|
```
|
||||||
|
|
||||||
Действие в правой части `&&` выполнится только в том случае, если до него дойдут вычисления. То есть, `alert` сработает, если в левой части будет `true`.
|
Действие в правой части `&&` выполнится только в том случае, если до него дойдут вычисления. То есть, `alert` сработает, если в левой части будет `true`.
|
||||||
|
@ -235,7 +236,7 @@ var x = 1;
|
||||||
var x = 1;
|
var x = 1;
|
||||||
|
|
||||||
if (x > 0) {
|
if (x > 0) {
|
||||||
alert('Больше');
|
alert( 'Больше' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -261,15 +262,15 @@ var result = !value;
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( !true ) // false
|
alert(!true) // false
|
||||||
alert( !0 ) // true
|
alert(!0) // true
|
||||||
```
|
```
|
||||||
|
|
||||||
**В частности, двойное НЕ используются для преобразования значений к логическому типу:**
|
**В частности, двойное НЕ используются для преобразования значений к логическому типу:**
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( !!"строка" ) // true
|
alert(!!"строка") // true
|
||||||
alert( !!null ) // false
|
alert(!!null) // false
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,11 @@
|
||||||
"" + 1 + 0 = "10" // (1)
|
"" + 1 + 0 = "10" // (1)
|
||||||
"" - 1 + 0 = -1 // (2)
|
"" - 1 + 0 = -1 // (2)
|
||||||
true + false = 1
|
true + false = 1
|
||||||
6 / "3" = 2
|
6 / "3" = 2 "2" * "3" = 6
|
||||||
"2" * "3" = 6
|
|
||||||
4 + 5 + "px" = "9px"
|
4 + 5 + "px" = "9px"
|
||||||
"$" + 4 + 5
= "$45"
|
"$" + 4 + 5
= "$45"
|
||||||
"4" - 2
= 2
|
"4" - 2
= 2 "4px" - 2
= NaN
|
||||||
"4px" - 2
= NaN
|
7 / 0
= Infinity " -9\n" + 5 = " -9\n5"
|
||||||
7 / 0
= Infinity
|
|
||||||
" -9\n" + 5 = " -9\n5"
|
|
||||||
" -9\n" - 5 = -14
|
" -9\n" - 5 = -14
|
||||||
5 && 2
= 2
|
5 && 2
= 2
|
||||||
2 && 5
= 5
|
2 && 5
= 5
|
||||||
|
|
|
@ -5,18 +5,13 @@
|
||||||
Подумайте, какой результат будет у выражений ниже. Тут не только преобразования типов. Когда закончите -- сверьтесь с решением.
|
Подумайте, какой результат будет у выражений ниже. Тут не только преобразования типов. Когда закончите -- сверьтесь с решением.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
"" + 1 + 0
|
"" + 1 + 0 "" - 1 + 0
|
||||||
"" - 1 + 0
|
|
||||||
true + false
|
true + false
|
||||||
6 / "3"
|
6 / "3"
|
||||||
"2" * "3"
|
"2" * "3"
|
||||||
4 + 5 + "px"
|
4 + 5 + "px"
|
||||||
"$" + 4 + 5
|
"$" + 4 + 5
"4" - 2
"4px" - 2
|
||||||
"4" - 2
|
7 / 0
" -9\n" + 5 " -9\n" - 5
|
||||||
"4px" - 2
|
|
||||||
7 / 0
|
|
||||||
" -9\n" + 5
|
|
||||||
" -9\n" - 5
|
|
||||||
5 && 2
|
5 && 2
|
||||||
2 && 5
|
2 && 5
|
||||||
5 || 0
|
5 || 0
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
//+ run
|
//+ run
|
||||||
var a = true;
|
var a = true;
|
||||||
|
|
||||||
alert(a); // "true"
|
alert( a ); // "true"
|
||||||
```
|
```
|
||||||
|
|
||||||
Можно также осуществить преобразование явным вызовом `String(val)`:
|
Можно также осуществить преобразование явным вызовом `String(val)`:
|
||||||
|
@ -37,7 +37,7 @@ alert( String(null) === "null" ); // true
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( true + "test" ); // "truetest"
|
alert( true + "test" ); // "truetest"
|
||||||
alert( "123" + undefined); // "123undefined"
|
alert( "123" + undefined ); // "123undefined"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Численное преобразование
|
## Численное преобразование
|
||||||
|
@ -64,7 +64,7 @@ var a = Number("123"); // 123, тот же эффект
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
// после обрезания пробельных символов останется "123"
|
// после обрезания пробельных символов останется "123"
|
||||||
alert( +" \n 123 \n \n"); // 123
|
alert( +" \n 123 \n \n" ); // 123
|
||||||
```
|
```
|
||||||
|
|
||||||
Ещё примеры:
|
Ещё примеры:
|
||||||
|
@ -74,7 +74,7 @@ alert( +" \n 123 \n \n"); // 123
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( +true ); // 1
|
alert( +true ); // 1
|
||||||
alert( +false); // 0
|
alert( +false ); // 0
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -120,18 +120,18 @@ alert( "1" == true );
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(null >= 0); // true, т.к. null преобразуется к 0
|
alert( null >= 0 ); // true, т.к. null преобразуется к 0
|
||||||
alert(null > 0); // false (не больше), т.к. null преобразуется к 0
|
alert( null > 0 ); // false (не больше), т.к. null преобразуется к 0
|
||||||
alert(null == 0 ); // false (и не равен!), т.к. == рассматривает null особо.
|
alert( null == 0 ); // false (и не равен!), т.к. == рассматривает null особо.
|
||||||
```
|
```
|
||||||
|
|
||||||
Значение `undefined` вообще "несравнимо":
|
Значение `undefined` вообще "несравнимо":
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(undefined > 0); // false, т.к. undefined -> NaN
|
alert( undefined > 0 ); // false, т.к. undefined -> NaN
|
||||||
alert(undefined == 0); // false, т.к. это undefined (без преобразования)
|
alert( undefined == 0 ); // false, т.к. это undefined (без преобразования)
|
||||||
alert(undefined < 0); // false, т.к. undefined -> NaN
|
alert( undefined < 0 ); // false, т.к. undefined -> NaN
|
||||||
```
|
```
|
||||||
|
|
||||||
**Для более очевидной работы кода и во избежание ошибок лучше не давать специальным значениям участвовать в сравнениях `> >= < <=`.**
|
**Для более очевидной работы кода и во избежание ошибок лучше не давать специальным значениям участвовать в сравнениях `> >= < <=`.**
|
||||||
|
@ -186,7 +186,7 @@ alert( 0 == "\n0\n" ); // true
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
if ("\n0\n") {
|
if ("\n0\n") {
|
||||||
alert("true, совсем не как 0!");
|
alert( "true, совсем не как 0!" );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
//+ run
|
//+ run
|
||||||
var i = 3;
|
var i = 3;
|
||||||
|
|
||||||
while(i) {
|
while (i) {
|
||||||
alert(i--);
|
alert( i-- );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ while(i) {
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var i = 3
|
var i = 3
|
||||||
alert(i--); // выведет 3, затем уменьшит i до 2
|
alert( i-- ); // выведет 3, затем уменьшит i до 2
|
||||||
|
|
||||||
alert(i--) // выведет 2, затем уменьшит i до 1
|
alert(i--) // выведет 2, затем уменьшит i до 1
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
```js
|
```js
|
||||||
var i = 3;
|
var i = 3;
|
||||||
|
|
||||||
while(i) {
|
while (i) {
|
||||||
alert(i--);
|
alert( i-- );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (++i < 5) alert(i);
|
while (++i < 5) alert( i );
|
||||||
```
|
```
|
||||||
|
|
||||||
Первое значение: `i=1`, так как операция `++i` сначала увеличит `i`, а потом уже произойдёт сравнение и выполнение `alert`.
|
Первое значение: `i=1`, так как операция `++i` сначала увеличит `i`, а потом уже произойдёт сравнение и выполнение `alert`.
|
||||||
|
@ -18,7 +18,7 @@ while (++i < 5) alert(i);
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (i++ < 5) alert(i);
|
while (i++ < 5) alert( i );
|
||||||
```
|
```
|
||||||
|
|
||||||
Первое значение: `i=1`. Остановимся на нём подробнее. Оператор `i++` увеличивает `i`, возвращая старое значение, так что в сравнении `i++ < 5` будет участвовать старое `i=0`.
|
Первое значение: `i=1`. Остановимся на нём подробнее. Оператор `i++` увеличивает `i`, возвращая старое значение, так что в сравнении `i++ < 5` будет участвовать старое `i=0`.
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (++i < 5) alert(i);
|
while (++i < 5) alert( i );
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -16,7 +16,7 @@ while (++i < 5) alert(i);
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (i++ < 5) alert(i);
|
while (i++ < 5) alert( i );
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
for(var i=0; i<5; ++i) alert(i);
|
for (var i = 0; i < 5; ++i) alert( i );
|
||||||
|
|
||||||
for(var i=0; i<5; i++) alert(i);
|
for (var i = 0; i < 5; i++) alert( i );
|
||||||
```
|
```
|
||||||
|
|
||||||
Такой результат обусловлен алгоритмом работы `for`:
|
Такой результат обусловлен алгоритмом работы `for`:
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
<li>Постфиксная форма:
|
<li>Постфиксная форма:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
for(var i=0; i<5; i++) alert(i);
|
for (var i = 0; i < 5; i++) alert( i );
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
<li>Префиксная форма:
|
<li>Префиксная форма:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
for(var i=0; i<5; ++i) alert(i);
|
for (var i = 0; i < 5; ++i) alert( i );
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
```js
|
```js
|
||||||
//+ run demo
|
//+ run demo
|
||||||
for (var i = 2; i <= 10; i++) {
|
for (var i = 2; i <= 10; i++) {
|
||||||
if ( i % 2 == 0) {
|
if (i % 2 == 0) {
|
||||||
alert(i);
|
alert( i );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
//+ run
|
//+ run
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (i < 3) {
|
while (i < 3) {
|
||||||
alert("номер " + i + "!");
|
alert( "номер " + i + "!" );
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
for (var i = 0; i < 3; i++) {
|
for (var i = 0; i < 3; i++) {
|
||||||
alert("номер " + i + "!");
|
alert( "номер " + i + "!" );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ var num;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
num = prompt("Введите число больше 100?", 0);
|
num = prompt("Введите число больше 100?", 0);
|
||||||
} while(num <= 100 && num != null);
|
} while (num <= 100 && num != null);
|
||||||
```
|
```
|
||||||
|
|
||||||
Цикл `do..while` повторяется, пока верны две проверки:
|
Цикл `do..while` повторяется, пока верны две проверки:
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
Для всех i от 1 до 10 {
|
Для всех i от 1 до 10 {
|
||||||
проверить, делится ли число i на какое-либо из чисел до него
|
проверить, делится ли число i на какое - либо из чисел до него
|
||||||
если делится, то это i не подходит, берем следующее
|
если делится, то это i не подходит, берем следующее
|
||||||
если не делится, то i - простое число
|
если не делится, то i - простое число
|
||||||
}
|
}
|
||||||
|
@ -15,14 +15,14 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
nextPrime:
|
nextPrime:
|
||||||
for(var i=2; i<10; i++) {
|
for (var i = 2; i < 10; i++) {
|
||||||
|
|
||||||
for(var j=2; j<i; j++) {
|
for (var j = 2; j < i; j++) {
|
||||||
if ( i % j == 0) continue nextPrime;
|
if (i % j == 0) continue nextPrime;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert(i); // простое
|
alert( i ); // простое
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Конечно же, его можно оптимизировать с точки зрения производительности. Например, проверять все `j` не от `2` до `i`, а от `2` до квадратного корня из `i`. А для очень больших чисел -- существуют более эффективные специализированные алгоритмы проверки простоты числа, например [квадратичное решето](http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D0%BE%D0%B3%D0%BE_%D1%80%D0%B5%D1%88%D0%B5%D1%82%D0%B0) и [решето числового поля](http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%89%D0%B8%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D1%82%D0%B0_%D1%87%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8F).
|
Конечно же, его можно оптимизировать с точки зрения производительности. Например, проверять все `j` не от `2` до `i`, а от `2` до квадратного корня из `i`. А для очень больших чисел -- существуют более эффективные специализированные алгоритмы проверки простоты числа, например [квадратичное решето](http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D0%BE%D0%B3%D0%BE_%D1%80%D0%B5%D1%88%D0%B5%D1%82%D0%B0) и [решето числового поля](http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%89%D0%B8%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D1%82%D0%B0_%D1%87%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8F).
|
|
@ -24,7 +24,7 @@ while (условие) {
|
||||||
//+ run
|
//+ run
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (i < 3) {
|
while (i < 3) {
|
||||||
alert(i);
|
alert( i );
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -49,7 +49,7 @@ var i = 3;
|
||||||
*!*
|
*!*
|
||||||
while (i) { // при i=0 значение в скобках будет false и цикл остановится
|
while (i) { // при i=0 значение в скобках будет false и цикл остановится
|
||||||
*/!*
|
*/!*
|
||||||
alert(i);
|
alert( i );
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -72,7 +72,7 @@ do {
|
||||||
//+ run
|
//+ run
|
||||||
var i = 0;
|
var i = 0;
|
||||||
do {
|
do {
|
||||||
alert(i);
|
alert( i );
|
||||||
i++;
|
i++;
|
||||||
} while (i < 3);
|
} while (i < 3);
|
||||||
```
|
```
|
||||||
|
@ -96,8 +96,8 @@ for (начало; условие; шаг) {
|
||||||
//+ run
|
//+ run
|
||||||
var i;
|
var i;
|
||||||
|
|
||||||
for (i=0; i<3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
alert(i);
|
alert( i );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ for (i=0; i<3; i++) {
|
||||||
В цикле также можно определить переменную:
|
В цикле также можно определить переменную:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
for (*!*var*/!* i=0; i<3; i++) {
|
for (*!*var*/!* i=0; i<3; i++) {
|
||||||
alert(i); // 0, 1, 2
|
alert(i); // 0, 1, 2
|
||||||
}
|
}
|
||||||
|
@ -144,8 +144,8 @@ for (*!*var*/!* i=0; i<3; i++) {
|
||||||
//+ run
|
//+ run
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
for (; i<3; i++) {
|
for (; i < 3; i++) {
|
||||||
alert(i); // 0, 1, 2
|
alert( i ); // 0, 1, 2
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -155,8 +155,8 @@ for (; i<3; i++) {
|
||||||
//+ run
|
//+ run
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
for (; i<3;) {
|
for (; i < 3;) {
|
||||||
alert(i);
|
alert( i );
|
||||||
// цикл превратился в аналог while (i<3)
|
// цикл превратился в аналог while (i<3)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -187,7 +187,7 @@ for (;;) {
|
||||||
```js
|
```js
|
||||||
var sum = 0;
|
var sum = 0;
|
||||||
|
|
||||||
while(true) {
|
while (true) {
|
||||||
|
|
||||||
var value = +prompt("Введите число", '');
|
var value = +prompt("Введите число", '');
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ while(true) {
|
||||||
sum += value;
|
sum += value;
|
||||||
|
|
||||||
}
|
}
|
||||||
alert('Сумма: ' + sum);
|
alert( 'Сумма: ' + sum );
|
||||||
```
|
```
|
||||||
|
|
||||||
Директива `break` в строке `(*)`, если посетитель ничего не ввёл, полностью прекращает выполнение цикла и передаёт управление на строку за его телом, то есть на `alert`.
|
Директива `break` в строке `(*)`, если посетитель ничего не ввёл, полностью прекращает выполнение цикла и передаёт управление на строку за его телом, то есть на `alert`.
|
||||||
|
@ -216,7 +216,7 @@ alert('Сумма: ' + sum);
|
||||||
Например, цикл ниже использует `continue`, чтобы не выводить четные значения:
|
Например, цикл ниже использует `continue`, чтобы не выводить четные значения:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
for (var i = 0; i < 10; i++) {
|
for (var i = 0; i < 10; i++) {
|
||||||
|
|
||||||
*!*if (i % 2 == 0) continue;*/!*
|
*!*if (i % 2 == 0) continue;*/!*
|
||||||
|
@ -235,7 +235,7 @@ for (var i = 0; i < 10; i++) {
|
||||||
for (var i = 0; i < 10; i++) {
|
for (var i = 0; i < 10; i++) {
|
||||||
|
|
||||||
if (i % 2) {
|
if (i % 2) {
|
||||||
alert(i);
|
alert( i );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -274,6 +274,7 @@ if (условие) {
|
||||||
Поэтому такой код приведёт к ошибке:
|
Поэтому такой код приведёт к ошибке:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
(i > 5) ? alert(i) : *!*continue*/!*;
|
(i > 5) ? alert(i) : *!*continue*/!*;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -287,7 +288,7 @@ if (условие) {
|
||||||
Например, внутри цикла по `i` находится цикл по `j`, и при выполнении некоторого условия мы бы хотели выйти из обоих циклов сразу:
|
Например, внутри цикла по `i` находится цикл по `j`, и при выполнении некоторого условия мы бы хотели выйти из обоих циклов сразу:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
*!*outer:*/!* for (var i = 0; i < 3; i++) {
|
*!*outer:*/!* for (var i = 0; i < 3; i++) {
|
||||||
|
|
||||||
for (var j = 0; j < 3; j++) {
|
for (var j = 0; j < 3; j++) {
|
||||||
|
@ -308,12 +309,14 @@ alert('Готово!');
|
||||||
Метка имеет вид `"имя:"`, имя должно быть уникальным. Она ставится перед циклом, вот так:
|
Метка имеет вид `"имя:"`, имя должно быть уникальным. Она ставится перед циклом, вот так:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
outer: for (var i = 0; i < 3; i++) { ... }
|
outer: for (var i = 0; i < 3; i++) { ... }
|
||||||
```
|
```
|
||||||
|
|
||||||
Можно также выносить ее на отдельную строку:
|
Можно также выносить ее на отдельную строку:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
outer:
|
outer:
|
||||||
for (var i = 0; i < 3; i++) { ... }
|
for (var i = 0; i < 3; i++) { ... }
|
||||||
```
|
```
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
В реальном случае, скорее всего, подойдёт обычное сравнение `'=='`.
|
В реальном случае, скорее всего, подойдёт обычное сравнение `'=='`.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
if(browser == 'IE') {
|
if(browser == 'IE') {
|
||||||
alert('О, да у вас IE!');
|
alert('О, да у вас IE!');
|
||||||
} else if (browser == 'Chrome'
|
} else if (browser == 'Chrome'
|
||||||
|
|
|
@ -5,20 +5,20 @@
|
||||||
Напишите `if..else`, соответствующий следующему `switch`:
|
Напишите `if..else`, соответствующий следующему `switch`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
switch(browser) {
|
switch (browser) {
|
||||||
case 'IE':
|
case 'IE':
|
||||||
alert('О, да у вас IE!');
|
alert( 'О, да у вас IE!' );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'Chrome':
|
case 'Chrome':
|
||||||
case 'Firefox':
|
case 'Firefox':
|
||||||
case 'Safari':
|
case 'Safari':
|
||||||
case 'Opera':
|
case 'Opera':
|
||||||
alert('Да, и эти браузеры мы поддерживаем');
|
alert( 'Да, и эти браузеры мы поддерживаем' );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
alert('Мы надеемся, что и в вашем браузере все ок!');
|
alert( 'Мы надеемся, что и в вашем браузере все ок!' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -4,18 +4,18 @@
|
||||||
//+ run
|
//+ run
|
||||||
var a = +prompt('a?', '');
|
var a = +prompt('a?', '');
|
||||||
|
|
||||||
switch(a) {
|
switch (a) {
|
||||||
case 0:
|
case 0:
|
||||||
alert(0);
|
alert( 0 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
alert(1);
|
alert( 1 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
alert('2,3');
|
alert( '2,3' );
|
||||||
*!*
|
*!*
|
||||||
break;
|
break;
|
||||||
*/!*
|
*/!*
|
||||||
|
|
|
@ -9,14 +9,14 @@
|
||||||
var a = +prompt('a?', '');
|
var a = +prompt('a?', '');
|
||||||
|
|
||||||
if (a == 0) {
|
if (a == 0) {
|
||||||
alert(0);
|
alert( 0 );
|
||||||
}
|
}
|
||||||
if (a == 1) {
|
if (a == 1) {
|
||||||
alert(1);
|
alert( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a == 2 || a == 3) {
|
if (a == 2 || a == 3) {
|
||||||
alert('2,3');
|
alert( '2,3' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
Выглядит она так:
|
Выглядит она так:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
switch(x) {
|
switch(x) {
|
||||||
case 'value1': // if (x === 'value1')
|
case 'value1': // if (x === 'value1')
|
||||||
...
|
...
|
||||||
|
@ -48,18 +49,18 @@ var a = 2 + 2;
|
||||||
|
|
||||||
switch (a) {
|
switch (a) {
|
||||||
case 3:
|
case 3:
|
||||||
alert('Маловато');
|
alert( 'Маловато' );
|
||||||
break;
|
break;
|
||||||
*!*
|
*!*
|
||||||
case 4:
|
case 4:
|
||||||
alert('В точку!');
|
alert( 'В точку!' );
|
||||||
break;
|
break;
|
||||||
*/!*
|
*/!*
|
||||||
case 5:
|
case 5:
|
||||||
alert('Перебор');
|
alert( 'Перебор' );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert('Я таких значений не знаю');
|
alert( 'Я таких значений не знаю' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -73,18 +74,18 @@ switch (a) {
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var a = 2+2;
|
var a = 2 + 2;
|
||||||
|
|
||||||
switch (a) {
|
switch (a) {
|
||||||
case 3:
|
case 3:
|
||||||
alert('Маловато');
|
alert( 'Маловато' );
|
||||||
*!*
|
*!*
|
||||||
case 4:
|
case 4:
|
||||||
alert('В точку!');
|
alert( 'В точку!' );
|
||||||
case 5:
|
case 5:
|
||||||
alert('Перебор');
|
alert( 'Перебор' );
|
||||||
default:
|
default:
|
||||||
alert('Я таких значений не знаю');
|
alert( 'Я таких значений не знаю' );
|
||||||
*/!*
|
*/!*
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -92,9 +93,9 @@ switch (a) {
|
||||||
В примере выше последовательно выполнятся три `alert`:
|
В примере выше последовательно выполнятся три `alert`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
alert('В точку!');
|
alert( 'В точку!' );
|
||||||
alert('Перебор');
|
alert( 'Перебор' );
|
||||||
alert('Я таких значений не знаю');
|
alert( 'Я таких значений не знаю' );
|
||||||
```
|
```
|
||||||
|
|
||||||
В `case` могут быть любые выражения, в том числе включающие в себя переменные и функции.
|
В `case` могут быть любые выражения, в том числе включающие в себя переменные и функции.
|
||||||
|
@ -106,10 +107,10 @@ alert('Я таких значений не знаю');
|
||||||
var a = 1;
|
var a = 1;
|
||||||
var b = 0;
|
var b = 0;
|
||||||
|
|
||||||
switch(a) {
|
switch (a) {
|
||||||
*!*
|
*!*
|
||||||
case b+1:
|
case b + 1:
|
||||||
alert(1);
|
alert( 1 );
|
||||||
break;
|
break;
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
|
@ -125,7 +126,7 @@ switch(a) {
|
||||||
В примере ниже `case 3` и `case 5` выполняют один и тот же код:
|
В примере ниже `case 3` и `case 5` выполняют один и тот же код:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var a = 2+2;
|
var a = 2+2;
|
||||||
|
|
||||||
switch (a) {
|
switch (a) {
|
||||||
|
@ -155,17 +156,17 @@ switch (a) {
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var arg = prompt("Введите arg?")
|
var arg = prompt("Введите arg?")
|
||||||
switch(arg) {
|
switch (arg) {
|
||||||
case '0':
|
case '0':
|
||||||
case '1':
|
case '1':
|
||||||
alert('Один или ноль');
|
alert( 'Один или ноль' );
|
||||||
|
|
||||||
case '2':
|
case '2':
|
||||||
alert('Два');
|
alert( 'Два' );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
alert('Никогда не выполнится');
|
alert( 'Никогда не выполнится' );
|
||||||
|
|
||||||
default:
|
default:
|
||||||
alert('Неизвестное значение: ' + arg)
|
alert('Неизвестное значение: ' + arg)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
var result = x;
|
var result = x;
|
||||||
|
|
||||||
for(var i = 1; i < n; i++) {
|
for (var i = 1; i < n; i++) {
|
||||||
result *= x;
|
result *= x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
Напишите функцию `pow(x,n)`, которая возвращает `x` в степени `n`. Иначе говоря, умножает `x` на себя `n` раз и возвращает результат.
|
Напишите функцию `pow(x,n)`, которая возвращает `x` в степени `n`. Иначе говоря, умножает `x` на себя `n` раз и возвращает результат.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
pow(3, 2) = 3*3 = 9
|
pow(3, 2) = 3 * 3 = 9
|
||||||
pow(3, 3) = 3*3*3 = 27
|
pow(3, 3) = 3 * 3 * 3 = 27
|
||||||
pow(1, 100) = 1*1*...*1 = 1
|
pow(1, 100) = 1 * 1 * ...*1 = 1
|
||||||
```
|
```
|
||||||
|
|
||||||
Создайте страницу, которая запрашивает `x` и `n`, а затем выводит результат `pow(x,n)`.
|
Создайте страницу, которая запрашивает `x` и `n`, а затем выводит результат `pow(x,n)`.
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
function showMessage() {
|
function showMessage() {
|
||||||
alert('Привет всем присутствующим!');
|
alert( 'Привет всем присутствующим!' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ function showMessage() {
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function showMessage() {
|
function showMessage() {
|
||||||
alert('Привет всем присутствующим!');
|
alert( 'Привет всем присутствующим!' );
|
||||||
}
|
}
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
|
@ -49,12 +49,12 @@ function showMessage() {
|
||||||
var message = 'Привет, я - Вася!'; // локальная переменная
|
var message = 'Привет, я - Вася!'; // локальная переменная
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(message);
|
alert( message );
|
||||||
}
|
}
|
||||||
|
|
||||||
showMessage(); // 'Привет, я - Вася!'
|
showMessage(); // 'Привет, я - Вася!'
|
||||||
|
|
||||||
alert(message); // <-- будет ошибка, т.к. переменная видна только внутри
|
alert( message ); // <-- будет ошибка, т.к. переменная видна только внутри
|
||||||
```
|
```
|
||||||
|
|
||||||
**Блоки `if/else`, `switch`, `for`, `while`, `do..while` не влияют на область видимости переменных.**
|
**Блоки `if/else`, `switch`, `for`, `while`, `do..while` не влияют на область видимости переменных.**
|
||||||
|
@ -64,6 +64,7 @@ alert(message); // <-- будет ошибка, т.к. переменная ви
|
||||||
Например:
|
Например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
function count() {
|
function count() {
|
||||||
// переменные i,j не будут уничтожены по окончании цикла
|
// переменные i,j не будут уничтожены по окончании цикла
|
||||||
for (*!*var*/!* i=0; i<3; i++) {
|
for (*!*var*/!* i=0; i<3; i++) {
|
||||||
|
@ -86,12 +87,12 @@ function count() {
|
||||||
*!*
|
*!*
|
||||||
var i, j; // передвинули объявления var в начало
|
var i, j; // передвинули объявления var в начало
|
||||||
*/!*
|
*/!*
|
||||||
for (i=0; i<3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
j = i * 2;
|
j = i * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert(i); // i=3
|
alert( i ); // i=3
|
||||||
alert(j); // j=4
|
alert( j ); // j=4
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -100,7 +101,7 @@ function count() {
|
||||||
Функция может обратиться ко внешней переменной, например:
|
Функция может обратиться ко внешней переменной, например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var *!*userName*/!* = 'Вася';
|
var *!*userName*/!* = 'Вася';
|
||||||
|
|
||||||
function showMessage() {
|
function showMessage() {
|
||||||
|
@ -121,13 +122,13 @@ function showMessage() {
|
||||||
userName = 'Петя'; // (1) присвоение во внешнюю переменную
|
userName = 'Петя'; // (1) присвоение во внешнюю переменную
|
||||||
|
|
||||||
var message = 'Привет, я ' + userName;
|
var message = 'Привет, я ' + userName;
|
||||||
alert(message);
|
alert( message );
|
||||||
}
|
}
|
||||||
|
|
||||||
showMessage();
|
showMessage();
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
alert(userName); // Петя, значение внешней переменной изменено функцией
|
alert( userName ); // Петя, значение внешней переменной изменено функцией
|
||||||
*/!*
|
*/!*
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -154,7 +155,7 @@ function showMessage() {
|
||||||
|
|
||||||
showMessage();
|
showMessage();
|
||||||
|
|
||||||
alert(message); // Привет
|
alert( message ); // Привет
|
||||||
```
|
```
|
||||||
|
|
||||||
В коде выше переменная `message` нигде не объявлена, а сразу присваивается. Скорее всего, программист просто забыл поставить `var`.
|
В коде выше переменная `message` нигде не объявлена, а сразу присваивается. Скорее всего, программист просто забыл поставить `var`.
|
||||||
|
@ -177,7 +178,7 @@ alert(message); // Привет
|
||||||
Например, этот код выводит два сообщения:
|
Например, этот код выводит два сообщения:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
function showMessage(*!*from, text*/!*) { // параметры from, text
|
function showMessage(*!*from, text*/!*) { // параметры from, text
|
||||||
|
|
||||||
from = "** " + from + " **"; // здесь может быть сложный код оформления
|
from = "** " + from + " **"; // здесь может быть сложный код оформления
|
||||||
|
@ -201,14 +202,14 @@ function showMessage(from, text) {
|
||||||
*!*
|
*!*
|
||||||
from = '**' + from + '**'; // меняем локальную переменную from
|
from = '**' + from + '**'; // меняем локальную переменную from
|
||||||
*/!*
|
*/!*
|
||||||
alert(from + ': ' + text);
|
alert( from + ': ' + text );
|
||||||
}
|
}
|
||||||
|
|
||||||
var from = "Маша";
|
var from = "Маша";
|
||||||
|
|
||||||
showMessage(from, "Привет");
|
showMessage(from, "Привет");
|
||||||
|
|
||||||
alert(from); // старое значение from без изменений, в функции была изменена копия
|
alert( from ); // старое значение from без изменений, в функции была изменена копия
|
||||||
```
|
```
|
||||||
|
|
||||||
## Аргументы по умолчанию
|
## Аргументы по умолчанию
|
||||||
|
@ -234,7 +235,7 @@ function showMessage(from, text) {
|
||||||
}
|
}
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(from + ": " + text);
|
alert( from + ": " + text );
|
||||||
}
|
}
|
||||||
|
|
||||||
showMessage("Маша", "Привет!"); // Маша: Привет!
|
showMessage("Маша", "Привет!"); // Маша: Привет!
|
||||||
|
@ -273,7 +274,7 @@ function showMessage(from, text) {
|
||||||
Например, создадим функцию `calcD`, которая будет возвращать дискриминант квадратного уравнения по формуле <code>b<sup>2</sup> - 4ac</code>:
|
Например, создадим функцию `calcD`, которая будет возвращать дискриминант квадратного уравнения по формуле <code>b<sup>2</sup> - 4ac</code>:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
function calcD(a, b, c) {
|
function calcD(a, b, c) {
|
||||||
*!*return*/!* b*b - 4*a*c;
|
*!*return*/!* b*b - 4*a*c;
|
||||||
}
|
}
|
||||||
|
@ -301,9 +302,9 @@ function checkAge(age) {
|
||||||
var age = prompt('Ваш возраст?');
|
var age = prompt('Ваш возраст?');
|
||||||
|
|
||||||
if (checkAge(age)) {
|
if (checkAge(age)) {
|
||||||
alert('Доступ разрешен');
|
alert( 'Доступ разрешен' );
|
||||||
} else {
|
} else {
|
||||||
alert('В доступе отказано');
|
alert( 'В доступе отказано' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -319,7 +320,7 @@ function showMovie(age) {
|
||||||
*/!*
|
*/!*
|
||||||
}
|
}
|
||||||
|
|
||||||
alert("Фильм не для всех"); // (*)
|
alert( "Фильм не для всех" ); // (*)
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -360,12 +361,14 @@ alert( doNothing() === undefined ); // true
|
||||||
Функции, которые начинаются с `"show"` -- что-то показывают:
|
Функции, которые начинаются с `"show"` -- что-то показывают:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
showMessage(..) // префикс show, "показать" сообщение
|
showMessage(..) // префикс show, "показать" сообщение
|
||||||
```
|
```
|
||||||
|
|
||||||
Функции, начинающиеся с `"get"` -- получают, и т.п.:
|
Функции, начинающиеся с `"get"` -- получают, и т.п.:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
getAge(..) // get, "получает" возраст
|
getAge(..) // get, "получает" возраст
|
||||||
calcD(..) // calc, "вычисляет" дискриминант
|
calcD(..) // calc, "вычисляет" дискриминант
|
||||||
createForm(..) // create, "создает" форму
|
createForm(..) // create, "создает" форму
|
||||||
|
|
|
@ -20,7 +20,7 @@ alert( sayHi ); // выведет код функции
|
||||||
**Функцию можно скопировать в другую переменную:**
|
**Функцию можно скопировать в другую переменную:**
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
function sayHi() { // (1)
|
function sayHi() { // (1)
|
||||||
alert( "Привет" );
|
alert( "Привет" );
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ var f = function(параметры) {
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var sayHi = function(person) {
|
var sayHi = function(person) {
|
||||||
alert("Привет, " + person);
|
alert( "Привет, " + person );
|
||||||
};
|
};
|
||||||
|
|
||||||
sayHi('Вася');
|
sayHi('Вася');
|
||||||
|
@ -104,7 +104,7 @@ sayHi("Вася"); // Привет, Вася
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
function sayHi(name) {
|
function sayHi(name) {
|
||||||
alert("Привет, " + name);
|
alert( "Привет, " + name );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ sayHi("Вася"); // ошибка!
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
var sayHi = function(name) {
|
var sayHi = function(name) {
|
||||||
alert("Привет, " + name);
|
alert( "Привет, " + name );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -140,9 +140,13 @@ var sayHi = function(name) {
|
||||||
var age = +prompt("Сколько вам лет?", 20);
|
var age = +prompt("Сколько вам лет?", 20);
|
||||||
|
|
||||||
if (age >= 18) {
|
if (age >= 18) {
|
||||||
function sayHi() { alert('Прошу вас!'); }
|
function sayHi() {
|
||||||
|
alert( 'Прошу вас!' );
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
function sayHi() { alert('До 18 нельзя'); }
|
function sayHi() {
|
||||||
|
alert( 'До 18 нельзя' );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sayHi();
|
sayHi();
|
||||||
|
@ -158,8 +162,13 @@ sayHi();
|
||||||
<li>Дальше, во время выполнения, объявления Function Declaration игнорируются (они уже были обработаны). Это как если бы код был таким:
|
<li>Дальше, во время выполнения, объявления Function Declaration игнорируются (они уже были обработаны). Это как если бы код был таким:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
function sayHi() { alert('Прошу вас!'); }
|
function sayHi() {
|
||||||
function sayHi() { alert('До 18 нельзя'); }
|
alert( 'Прошу вас!' );
|
||||||
|
}
|
||||||
|
|
||||||
|
function sayHi() {
|
||||||
|
alert( 'До 18 нельзя' );
|
||||||
|
}
|
||||||
|
|
||||||
var age = 20;
|
var age = 20;
|
||||||
|
|
||||||
|
@ -191,9 +200,13 @@ var age = prompt('Сколько вам лет?');
|
||||||
var sayHi;
|
var sayHi;
|
||||||
|
|
||||||
if (age >= 18) {
|
if (age >= 18) {
|
||||||
sayHi = function() { alert('Прошу Вас!'); }
|
sayHi = function() {
|
||||||
|
alert( 'Прошу Вас!' );
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sayHi = function() { alert('До 18 нельзя'); }
|
sayHi = function() {
|
||||||
|
alert( 'До 18 нельзя' );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sayHi();
|
sayHi();
|
||||||
|
@ -202,7 +215,7 @@ sayHi();
|
||||||
Или даже так:
|
Или даже так:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var age = prompt('Сколько вам лет?');
|
var age = prompt('Сколько вам лет?');
|
||||||
|
|
||||||
var sayHi = (age >= 18) ?
|
var sayHi = (age >= 18) ?
|
||||||
|
@ -228,15 +241,15 @@ sayHi();
|
||||||
function ask(question, yes, no) {
|
function ask(question, yes, no) {
|
||||||
if (confirm(question)) yes()
|
if (confirm(question)) yes()
|
||||||
else no();
|
else no();
|
||||||
}
|
}
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
function showOk() {
|
function showOk() {
|
||||||
alert("Вы согласились.");
|
alert( "Вы согласились." );
|
||||||
}
|
}
|
||||||
|
|
||||||
function showCancel() {
|
function showCancel() {
|
||||||
alert("Вы отменили выполнение.");
|
alert( "Вы отменили выполнение." );
|
||||||
}
|
}
|
||||||
|
|
||||||
// использование
|
// использование
|
||||||
|
@ -250,7 +263,7 @@ ask("Вы согласны?", showOk, showCancel);
|
||||||
Здесь обратим внимание на то, что то же самое можно написать более коротко:
|
Здесь обратим внимание на то, что то же самое можно написать более коротко:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
function ask(question, yes, no) {
|
function ask(question, yes, no) {
|
||||||
if (confirm(question)) yes()
|
if (confirm(question)) yes()
|
||||||
else no();
|
else no();
|
||||||
|
@ -283,8 +296,8 @@ ask(
|
||||||
//+ run
|
//+ run
|
||||||
var sum = new Function('a,b', ' return a+b; ');
|
var sum = new Function('a,b', ' return a+b; ');
|
||||||
|
|
||||||
var result = sum(1,2);
|
var result = sum(1, 2);
|
||||||
alert(result); // 3
|
alert( result ); // 3
|
||||||
```
|
```
|
||||||
|
|
||||||
То есть, функция создаётся вызовом `new Function(params, code)`:
|
То есть, функция создаётся вызовом `new Function(params, code)`:
|
||||||
|
@ -340,6 +353,7 @@ alert(result); // 3
|
||||||
Сравните по читаемости:
|
Сравните по читаемости:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
// Function Expression
|
// Function Expression
|
||||||
var f = function() { ... }
|
var f = function() { ... }
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
//+ run
|
//+ run
|
||||||
function sumTo(n) {
|
function sumTo(n) {
|
||||||
var sum = 0;
|
var sum = 0;
|
||||||
for(var i=1; i<=n; i++) {
|
for (var i = 1; i <= n; i++) {
|
||||||
sum += i;
|
sum += i;
|
||||||
}
|
}
|
||||||
return sum;
|
return sum;
|
||||||
|
@ -19,7 +19,7 @@ alert( sumTo(100) );
|
||||||
//+ run
|
//+ run
|
||||||
function sumTo(n) {
|
function sumTo(n) {
|
||||||
if (n == 1) return 1;
|
if (n == 1) return 1;
|
||||||
return n + sumTo(n-1);
|
return n + sumTo(n - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( sumTo(100) );
|
alert( sumTo(100) );
|
||||||
|
@ -30,7 +30,7 @@ alert( sumTo(100) );
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function sumTo(n) {
|
function sumTo(n) {
|
||||||
return n*(n+1)/2;
|
return n * (n + 1) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( sumTo(100) );
|
alert( sumTo(100) );
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
Напишите функцию `sumTo(n)`, которая для данного `n` вычисляет сумму чисел от 1 до `n`, например:
|
Напишите функцию `sumTo(n)`, которая для данного `n` вычисляет сумму чисел от 1 до `n`, например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
sumTo(1) = 1
|
sumTo(1) = 1
|
||||||
sumTo(2) = 2 + 1 = 3
|
sumTo(2) = 2 + 1 = 3
|
||||||
sumTo(3) = 3 + 2 + 1 = 6
|
sumTo(3) = 3 + 2 + 1 = 6
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function factorial(n) {
|
function factorial(n) {
|
||||||
return (n!=1) ? n*factorial(n-1) : 1;
|
return (n != 1) ? n * factorial(n - 1) : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( factorial(5) ); // 120
|
alert( factorial(5) ); // 120
|
||||||
|
@ -16,7 +16,7 @@ alert( factorial(5) ); // 120
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function factorial(n) {
|
function factorial(n) {
|
||||||
return n ? n*factorial(n-1) : 1;
|
return n ? n * factorial(n - 1) : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( factorial(5) ); // 120
|
alert( factorial(5) ); // 120
|
||||||
|
|
|
@ -7,17 +7,17 @@
|
||||||
Определение факториала можно записать как:
|
Определение факториала можно записать как:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
n! = n*(n-1)*(n-2)*...*1
|
n! = n * (n - 1) * (n - 2) * ...*1
|
||||||
```
|
```
|
||||||
|
|
||||||
Примеры значений для разных `n`:
|
Примеры значений для разных `n`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
1! = 1
|
1! = 1
|
||||||
2! = 2*1 = 2
|
2! = 2 * 1 = 2
|
||||||
3! = 3*2*1 = 6
|
3! = 3 * 2 * 1 = 6
|
||||||
4! = 4*3*2*1 = 24
|
4! = 4 * 3 * 2 * 1 = 24
|
||||||
5! = 5*4*3*2*1 = 120
|
5! = 5 * 4 * 3 * 2 * 1 = 120
|
||||||
```
|
```
|
||||||
|
|
||||||
Задача -- написать функцию `factorial(n)`, которая возвращает факториал числа `n!`, используя рекурсивный вызов.
|
Задача -- написать функцию `factorial(n)`, которая возвращает факториал числа `n!`, используя рекурсивный вызов.
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function fib(n) {
|
function fib(n) {
|
||||||
return n <= 1 ? n : fib(n-1) + fib(n-2);
|
return n <= 1 ? n : fib(n - 1) + fib(n - 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( fib(3) ); // 2
|
alert( fib(3) ); // 2
|
||||||
|
@ -18,6 +18,7 @@ alert( fib(7) ); // 13
|
||||||
Это потому, что функция порождает обширное дерево вложенных вызовов. При этом ряд значений вычисляются много раз. Например, посмотрим на отрывок вычислений:
|
Это потому, что функция порождает обширное дерево вложенных вызовов. При этом ряд значений вычисляются много раз. Например, посмотрим на отрывок вычислений:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
...
|
...
|
||||||
fib(5) = fib(4) + fib(3)
|
fib(5) = fib(4) + fib(3)
|
||||||
fib(4) = fib(3) + fib(2)
|
fib(4) = fib(3) + fib(2)
|
||||||
|
@ -35,6 +36,7 @@ fib(4) = fib(3) + fib(2)
|
||||||
Будем идти по формуле слева-направо:
|
Будем идти по формуле слева-направо:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
var a = 1, b = 1; // начальные значения
|
var a = 1, b = 1; // начальные значения
|
||||||
var c = a + b; // 2
|
var c = a + b; // 2
|
||||||
|
|
||||||
|
@ -47,6 +49,7 @@ a b c
|
||||||
Теперь следующий шаг, присвоим `a` и `b` текущие 2 числа и получим новое следующее в `c`:
|
Теперь следующий шаг, присвоим `a` и `b` текущие 2 числа и получим новое следующее в `c`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
a = b, b = c;
|
a = b, b = c;
|
||||||
c = a + b;
|
c = a + b;
|
||||||
|
|
||||||
|
@ -59,6 +62,7 @@ c = a + b;
|
||||||
Следующий шаг даст нам еще одно число последовательности:
|
Следующий шаг даст нам еще одно число последовательности:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
a = b, b = c;
|
a = b, b = c;
|
||||||
c = a + b;
|
c = a + b;
|
||||||
|
|
||||||
|
@ -77,7 +81,8 @@ P.S. Этот подход к вычислению называется [дин
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function fib(n) {
|
function fib(n) {
|
||||||
var a = 1, b = 1;
|
var a = 1,
|
||||||
|
b = 1;
|
||||||
for (var i = 3; i <= n; i++) {
|
for (var i = 3; i <= n; i++) {
|
||||||
var c = a + b;
|
var c = a + b;
|
||||||
a = b;
|
a = b;
|
||||||
|
@ -88,7 +93,7 @@ function fib(n) {
|
||||||
|
|
||||||
alert( fib(3) ); // 2
|
alert( fib(3) ); // 2
|
||||||
alert( fib(7) ); // 13
|
alert( fib(7) ); // 13
|
||||||
alert( fib(77)); // 5527939700884757
|
alert( fib(77) ); // 5527939700884757
|
||||||
```
|
```
|
||||||
|
|
||||||
Цикл здесь начинается с `i=3`, так как первое и второе числа Фибоначчи заранее записаны в переменные `a=1`, `b=1`.
|
Цикл здесь начинается с `i=3`, так как первое и второе числа Фибоначчи заранее записаны в переменные `a=1`, `b=1`.
|
|
@ -11,6 +11,7 @@
|
||||||
Напишите функцию `fib(n)`, которая возвращает `n-е` число Фибоначчи. Пример работы:
|
Напишите функцию `fib(n)`, которая возвращает `n-е` число Фибоначчи. Пример работы:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
function fib(n) { /* ваш код */ }
|
function fib(n) { /* ваш код */ }
|
||||||
|
|
||||||
alert( fib(3) ); // 2
|
alert( fib(3) ); // 2
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
Её можно представить как совокупность более простого действия и более простой задачи того же типа вот так:
|
Её можно представить как совокупность более простого действия и более простой задачи того же типа вот так:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
pow(x, n) = x * pow(x, n-1)
|
pow(x, n) = x * pow(x, n - 1)
|
||||||
```
|
```
|
||||||
|
|
||||||
То есть, <code>x<sup>n</sup> = x * x<sup>n-1</sup></code>.
|
То есть, <code>x<sup>n</sup> = x * x<sup>n-1</sup></code>.
|
||||||
|
@ -46,7 +46,7 @@ pow(x, n) = x * pow(x, n-1)
|
||||||
//+ run
|
//+ run
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
if (n != 1) { // пока n != 1, сводить вычисление pow(x,n) к pow(x,n-1)
|
if (n != 1) { // пока n != 1, сводить вычисление pow(x,n) к pow(x,n-1)
|
||||||
return x * pow(x, n-1);
|
return x * pow(x, n - 1);
|
||||||
} else {
|
} else {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ alert( pow(2, 3) ); // 8
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
if (n != 1) { // пока n != 1 сводить вычисление pow(x,n) к pow(x,n-1)
|
if (n != 1) { // пока n != 1 сводить вычисление pow(x,n) к pow(x,n-1)
|
||||||
*!*
|
*!*
|
||||||
return x * pow(x, n-1);
|
return x * pow(x, n - 1);
|
||||||
*/!*
|
*/!*
|
||||||
} else {
|
} else {
|
||||||
return x;
|
return x;
|
||||||
|
@ -109,7 +109,7 @@ function pow(x, n) {
|
||||||
//+ run
|
//+ run
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
if (n != 1) { // пока n!=1 сводить вычисление pow(..n) к pow(..n-1)
|
if (n != 1) { // пока n!=1 сводить вычисление pow(..n) к pow(..n-1)
|
||||||
return x * pow(x, n-1);
|
return x * pow(x, n - 1);
|
||||||
} else {
|
} else {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ alert( pow(2, 3) ); // (*)
|
||||||
```js
|
```js
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
if (n != 1) {
|
if (n != 1) {
|
||||||
return x * pow(x, n-1);
|
return x * pow(x, n - 1);
|
||||||
} else {
|
} else {
|
||||||
*!*
|
*!*
|
||||||
return x; // первая степень числа равна самому числу
|
return x; // первая степень числа равна самому числу
|
||||||
|
@ -194,7 +194,7 @@ function pow(x, n) {
|
||||||
```js
|
```js
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
var result = x;
|
var result = x;
|
||||||
for(var i=1; i<n; i++) {
|
for (var i = 1; i < n; i++) {
|
||||||
result *= x;
|
result *= x;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
alert("обычный скрипт");
|
alert( "обычный скрипт" );
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<script async src="big.js"></script>
|
<script async src="big.js"></script>
|
||||||
|
|
||||||
<script defer async>
|
<script defer async>
|
||||||
alert("обычный скрипт");
|
alert( "обычный скрипт" );
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
```html
|
```html
|
||||||
<script src="file.js"></script>
|
<script src="file.js"></script>
|
||||||
<script>
|
<script>
|
||||||
alert(1);
|
alert( 1 );
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -69,24 +69,27 @@
|
||||||
<!--+ run height=100 -->
|
<!--+ run height=100 -->
|
||||||
<!DOCTYPE HTML>
|
<!DOCTYPE HTML>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<p>Начинаем считать:</p>
|
<p>Начинаем считать:</p>
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
<script>
|
<script>
|
||||||
alert('Первый кролик!');
|
alert( 'Первый кролик!' );
|
||||||
alert('Второй кролик!');
|
alert( 'Второй кролик!' );
|
||||||
alert('Третий кролик!');
|
alert( 'Третий кролик!' );
|
||||||
</script>
|
</script>
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
<p>Кролики посчитаны!</p>
|
<p>Кролики посчитаны!</p>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
**Первый код выведет `function ...`, второй -- ошибку во всех браузерах, кроме IE8-.**
|
**Первый код выведет `function ...`, второй -- ошибку во всех браузерах, кроме IE8-.**
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run untrusted
|
//+ run untrusted no-beautify
|
||||||
// обычное объявление функции (Function Declaration)
|
// обычное объявление функции (Function Declaration)
|
||||||
function g() { return 1; };
|
function g() { return 1; };
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ alert(g); // функция
|
||||||
Во втором коде скобки есть, значит функция внутри является не `Function Declaration`, а частью выражения, то есть `Named Function Expression`. Его имя видно только внутри, снаружи переменная `g` не определена.
|
Во втором коде скобки есть, значит функция внутри является не `Function Declaration`, а частью выражения, то есть `Named Function Expression`. Его имя видно только внутри, снаружи переменная `g` не определена.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run untrusted
|
//+ run untrusted no-beautify
|
||||||
// Named Function Expression!
|
// Named Function Expression!
|
||||||
(function g() { return 1; });
|
(function g() { return 1; });
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
Каков будет результат выполнения кода?
|
Каков будет результат выполнения кода?
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
function g() { return 1; }
|
function g() { return 1; }
|
||||||
|
|
||||||
alert(g);
|
alert(g);
|
||||||
|
@ -13,6 +14,7 @@ alert(g);
|
||||||
А такого? Будет ли разница, если да -- почему?
|
А такого? Будет ли разница, если да -- почему?
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
(function g() { return 1; });
|
(function g() { return 1; });
|
||||||
|
|
||||||
alert(g);
|
alert(g);
|
||||||
|
|
|
@ -9,12 +9,13 @@
|
||||||
|
|
||||||
Обычное функциональное выражение:
|
Обычное функциональное выражение:
|
||||||
```js
|
```js
|
||||||
var f = function (...) { /* тело функции */ };
|
var f = function(...) { /* тело функции */ };
|
||||||
```
|
```
|
||||||
|
|
||||||
Именованное с именем `sayHi`:
|
Именованное с именем `sayHi`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
var f = function *!*sayHi*/!*(...) { /* тело функции */ };
|
var f = function *!*sayHi*/!*(...) { /* тело функции */ };
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -29,10 +30,10 @@ var f = function *!*sayHi*/!*(...) { /* тело функции */ };
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var f = function sayHi(name) {
|
var f = function sayHi(name) {
|
||||||
alert(sayHi); // изнутри функции - видно (выведет код функции)
|
alert( sayHi ); // изнутри функции - видно (выведет код функции)
|
||||||
};
|
};
|
||||||
|
|
||||||
alert(sayHi); // снаружи - не видно (ошибка: undefined variable 'sayHi')
|
alert( sayHi ); // снаружи - не видно (ошибка: undefined variable 'sayHi')
|
||||||
```
|
```
|
||||||
|
|
||||||
Кроме того, имя NFE нельзя перезаписать:
|
Кроме того, имя NFE нельзя перезаписать:
|
||||||
|
@ -43,7 +44,7 @@ var test = function sayHi(name) {
|
||||||
*!*
|
*!*
|
||||||
sayHi = "тест"; // попытка перезаписи
|
sayHi = "тест"; // попытка перезаписи
|
||||||
*/!*
|
*/!*
|
||||||
alert(sayHi); // function... (перезапись не удалась)
|
alert( sayHi ); // function... (перезапись не удалась)
|
||||||
};
|
};
|
||||||
|
|
||||||
test();
|
test();
|
||||||
|
@ -64,7 +65,7 @@ NFE используется в первую очередь в тех ситуа
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function f(n) {
|
function f(n) {
|
||||||
return n ? n*f(n-1) : 1;
|
return n ? n * f(n - 1) : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
alert( f(5) ); // 120
|
alert( f(5) ); // 120
|
||||||
|
@ -75,7 +76,7 @@ alert( f(5) ); // 120
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function f(n) {
|
function f(n) {
|
||||||
return n ? n*f(n-1) : 1;
|
return n ? n * f(n - 1) : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
|
@ -91,7 +92,7 @@ alert( g(5) ); // запуск функции с новым именем - ош
|
||||||
Для того, чтобы функция всегда надёжно работала, объявим её как Named Function Expression:
|
Для того, чтобы функция всегда надёжно работала, объявим её как Named Function Expression:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var f = function *!*factorial*/!*(n) {
|
var f = function *!*factorial*/!*(n) {
|
||||||
return n ? n**!*factorial*/!*(n-1) : 1;
|
return n ? n**!*factorial*/!*(n-1) : 1;
|
||||||
};
|
};
|
||||||
|
@ -118,7 +119,7 @@ var f = function factorial(n) { /*...*/ };
|
||||||
|
|
||||||
// в IE8- false
|
// в IE8- false
|
||||||
// в остальных браузерах ошибка, т.к. имя factorial не видно
|
// в остальных браузерах ошибка, т.к. имя factorial не видно
|
||||||
alert(f === factorial);
|
alert( f === factorial );
|
||||||
```
|
```
|
||||||
|
|
||||||
Все остальные браузеры полностью поддерживают именованные функциональные выражения.
|
Все остальные браузеры полностью поддерживают именованные функциональные выражения.
|
||||||
|
|
|
@ -13,14 +13,14 @@
|
||||||
Операторы разделяются точкой с запятой:
|
Операторы разделяются точкой с запятой:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert('Привет'); alert('Мир');
|
alert('Привет'); alert('Мир');
|
||||||
```
|
```
|
||||||
|
|
||||||
Как правило, перевод строки тоже подразумевает точку с запятой. Так тоже будет работать:
|
Как правило, перевод строки тоже подразумевает точку с запятой. Так тоже будет работать:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert('Привет')
|
alert('Привет')
|
||||||
alert('Мир')
|
alert('Мир')
|
||||||
```
|
```
|
||||||
|
@ -28,7 +28,7 @@ alert('Мир')
|
||||||
...Однако, иногда JavaScript не вставляет точку с запятой. Например:
|
...Однако, иногда JavaScript не вставляет точку с запятой. Например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var a = 2
|
var a = 2
|
||||||
+3
|
+3
|
||||||
|
|
||||||
|
@ -66,6 +66,7 @@ x = "Петя";
|
||||||
<li>Есть 5 "примитивных" типов и объекты:
|
<li>Есть 5 "примитивных" типов и объекты:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
x = 1; // число
|
x = 1; // число
|
||||||
x = "Тест"; // строка, кавычки могут быть одинарные или двойные
|
x = "Тест"; // строка, кавычки могут быть одинарные или двойные
|
||||||
x = true; // булево значение true/false
|
x = true; // булево значение true/false
|
||||||
|
@ -144,8 +145,8 @@ alert( x ); // undefined
|
||||||
var userName = prompt("Введите имя?", "Василий");
|
var userName = prompt("Введите имя?", "Василий");
|
||||||
var isTeaWanted = confirm("Вы хотите чаю?");
|
var isTeaWanted = confirm("Вы хотите чаю?");
|
||||||
|
|
||||||
alert( "Посетитель: " + userName);
|
alert( "Посетитель: " + userName );
|
||||||
alert( "Чай: " + isTeaWanted);
|
alert( "Чай: " + isTeaWanted );
|
||||||
```
|
```
|
||||||
|
|
||||||
Подробнее: [](/uibasic).
|
Подробнее: [](/uibasic).
|
||||||
|
@ -188,7 +189,7 @@ alert( true > 0 ); // true
|
||||||
Например, забавное следствие этих правил для `null`:
|
Например, забавное следствие этих правил для `null`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert( null > 0 ); // false, т.к. null преобразовано к 0
|
alert( null > 0 ); // false, т.к. null преобразовано к 0
|
||||||
alert( null >= 0 ); // true, т.к. null преобразовано к 0
|
alert( null >= 0 ); // true, т.к. null преобразовано к 0
|
||||||
alert( null == 0 ); // false, в стандарте явно указано, что null равен лишь undefined
|
alert( null == 0 ); // false, в стандарте явно указано, что null равен лишь undefined
|
||||||
|
@ -205,7 +206,7 @@ alert( null == 0 ); // false, в стандарте явно указано, ч
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert('а' > 'Я'); // true
|
alert( 'а' > 'Я' ); // true
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -250,7 +251,7 @@ while (условие) {
|
||||||
// 2
|
// 2
|
||||||
do {
|
do {
|
||||||
...
|
...
|
||||||
} while(условие);
|
} while (условие);
|
||||||
|
|
||||||
// 3
|
// 3
|
||||||
for (var i = 0; i < 10; i++) {
|
for (var i = 0; i < 10; i++) {
|
||||||
|
@ -295,14 +296,14 @@ var age = prompt('Ваш возраст', 18);
|
||||||
|
|
||||||
switch (age) {
|
switch (age) {
|
||||||
case 18:
|
case 18:
|
||||||
alert('Никогда не сработает'); // результат prompt - строка, а не число
|
alert( 'Никогда не сработает' ); // результат prompt - строка, а не число
|
||||||
|
|
||||||
case "18": // вот так - сработает!
|
case "18": // вот так - сработает!
|
||||||
alert('Вам 18 лет!');
|
alert( 'Вам 18 лет!' );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
alert('Любое значение, не совпавшее с case');
|
alert( 'Любое значение, не совпавшее с case' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -333,7 +334,7 @@ alert( sum(1, 2) ); // 3
|
||||||
<li>Функция без `return` считается возвращающей `undefined`. Вызов `return` без значения также возвращает `undefined`:
|
<li>Функция без `return` считается возвращающей `undefined`. Вызов `return` без значения также возвращает `undefined`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
function f() { }
|
function f() { }
|
||||||
alert( f() ); // undefined
|
alert( f() ); // undefined
|
||||||
```
|
```
|
||||||
|
@ -379,7 +380,7 @@ alert( sum(1, 2) ); // 3
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var factorial = function me(n) {
|
var factorial = function me(n) {
|
||||||
return (n == 1) ? n : n * me(n-1);
|
return (n == 1) ? n : n * me(n - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( factorial(5) ); // 120
|
alert( factorial(5) ); // 120
|
||||||
|
|
|
@ -11,14 +11,14 @@
|
||||||
Например, вместо одного вызова `alert` сделаем два:
|
Например, вместо одного вызова `alert` сделаем два:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert('Привет'); alert('Мир');
|
alert('Привет'); alert('Мир');
|
||||||
```
|
```
|
||||||
|
|
||||||
Как правило, каждая команда пишется на отдельной строке -- так код лучше читается:
|
Как правило, каждая команда пишется на отдельной строке -- так код лучше читается:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert('Привет');
|
alert('Привет');
|
||||||
alert('Мир');
|
alert('Мир');
|
||||||
```
|
```
|
||||||
|
@ -30,7 +30,7 @@ alert('Мир');
|
||||||
Так тоже будет работать:
|
Так тоже будет работать:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert('Привет')
|
alert('Привет')
|
||||||
alert('Мир')
|
alert('Мир')
|
||||||
```
|
```
|
||||||
|
@ -42,7 +42,7 @@ alert('Мир')
|
||||||
Например, запустите этот код:
|
Например, запустите этот код:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert(3 +
|
alert(3 +
|
||||||
1
|
1
|
||||||
+ 2);
|
+ 2);
|
||||||
|
@ -69,7 +69,7 @@ alert(3 +
|
||||||
Важно, что вот такой код уже работать не будет:
|
Важно, что вот такой код уже работать не будет:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert("Сейчас будет ошибка")
|
alert("Сейчас будет ошибка")
|
||||||
[1, 2].forEach(alert)
|
[1, 2].forEach(alert)
|
||||||
```
|
```
|
||||||
|
@ -79,7 +79,7 @@ alert("Сейчас будет ошибка")
|
||||||
Если её поставить, то всё будет в порядке:
|
Если её поставить, то всё будет в порядке:
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert("Сейчас будет ошибка");
|
alert( "Сейчас будет ошибка" );
|
||||||
[1, 2].forEach(alert)
|
[1, 2].forEach(alert)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -96,9 +96,9 @@ alert("Сейчас будет ошибка");
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
// Команда ниже говорит "Привет"
|
// Команда ниже говорит "Привет"
|
||||||
alert('Привет');
|
alert( 'Привет' );
|
||||||
|
|
||||||
alert('Мир'); // Второе сообщение выводим отдельно
|
alert( 'Мир' ); // Второе сообщение выводим отдельно
|
||||||
```
|
```
|
||||||
|
|
||||||
*Многострочные комментарии* начинаются слешем-звездочкой <code>"/*"</code> и заканчиваются звездочкой-слэшем <code>"*/"</code>, вот так:
|
*Многострочные комментарии* начинаются слешем-звездочкой <code>"/*"</code> и заканчиваются звездочкой-слэшем <code>"*/"</code>, вот так:
|
||||||
|
@ -108,8 +108,8 @@ alert('Мир'); // Второе сообщение выводим отдель
|
||||||
/* Пример с двумя сообщениями.
|
/* Пример с двумя сообщениями.
|
||||||
Это - многострочный комментарий.
|
Это - многострочный комментарий.
|
||||||
*/
|
*/
|
||||||
alert('Привет');
|
alert( 'Привет' );
|
||||||
alert('Мир');
|
alert( 'Мир' );
|
||||||
```
|
```
|
||||||
|
|
||||||
Все содержимое комментария игнорируется. Если поместить код внутрь <code>/* ... */</code> или после `//` -- он не выполнится.
|
Все содержимое комментария игнорируется. Если поместить код внутрь <code>/* ... */</code> или после `//` -- он не выполнится.
|
||||||
|
@ -117,9 +117,9 @@ alert('Мир');
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
/* Закомментировали код
|
/* Закомментировали код
|
||||||
alert('Привет');
|
alert( 'Привет' );
|
||||||
*/
|
*/
|
||||||
alert('Мир');
|
alert( 'Мир' );
|
||||||
```
|
```
|
||||||
|
|
||||||
[smart header="Используйте горячие клавиши!"]
|
[smart header="Используйте горячие клавиши!"]
|
||||||
|
@ -130,7 +130,7 @@ alert('Мир');
|
||||||
В этом коде будет ошибка:
|
В этом коде будет ошибка:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
/*
|
/*
|
||||||
/* вложенный комментарий ?!? */
|
/* вложенный комментарий ?!? */
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -8,6 +8,6 @@ name = "Василий";
|
||||||
|
|
||||||
admin = name;
|
admin = name;
|
||||||
|
|
||||||
alert(admin); // "Василий"
|
alert( admin ); // "Василий"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ message = 'Hello'; // сохраним в переменной строку
|
||||||
var message;
|
var message;
|
||||||
message = 'Hello!';
|
message = 'Hello!';
|
||||||
|
|
||||||
alert(message); // выведет содержимое переменной
|
alert( message ); // выведет содержимое переменной
|
||||||
```
|
```
|
||||||
|
|
||||||
Для краткости можно совместить объявление переменной и запись данных:
|
Для краткости можно совместить объявление переменной и запись данных:
|
||||||
|
@ -42,6 +42,7 @@ var message = 'Hello!';
|
||||||
Можно даже объявить несколько переменных сразу:
|
Можно даже объявить несколько переменных сразу:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
var user = 'John', age = 25, message = 'Hello';
|
var user = 'John', age = 25, message = 'Hello';
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ message = 'Hello!';
|
||||||
|
|
||||||
message = 'World!'; // заменили значение
|
message = 'World!'; // заменили значение
|
||||||
|
|
||||||
alert(message);
|
alert( message );
|
||||||
```
|
```
|
||||||
|
|
||||||
При изменении значения старое содержимое переменной удаляется.
|
При изменении значения старое содержимое переменной удаляется.
|
||||||
|
@ -83,8 +84,8 @@ var message;
|
||||||
message = hello;
|
message = hello;
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(hello); // Hello world!
|
alert( hello ); // Hello world!
|
||||||
alert(message); // Hello world!
|
alert( message ); // Hello world!
|
||||||
```
|
```
|
||||||
|
|
||||||
[smart]
|
[smart]
|
||||||
|
@ -117,12 +118,13 @@ var test123;
|
||||||
var $ = 1; // объявили переменную с именем '$'
|
var $ = 1; // объявили переменную с именем '$'
|
||||||
var _ = 2; // переменная с именем '_'
|
var _ = 2; // переменная с именем '_'
|
||||||
|
|
||||||
alert($ + _); // 3
|
alert( $ + _ ); // 3
|
||||||
```
|
```
|
||||||
|
|
||||||
А такие переменные были бы неправильными:
|
А такие переменные были бы неправильными:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
var 1a; // начало не может быть цифрой
|
var 1a; // начало не может быть цифрой
|
||||||
|
|
||||||
var my-name; // дефис '-' не является разрешенным символом
|
var my-name; // дефис '-' не является разрешенным символом
|
||||||
|
@ -139,7 +141,7 @@ var my-name; // дефис '-' не является разрешенным си
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var имя = "Вася";
|
var имя = "Вася";
|
||||||
alert(имя); // "Вася"
|
alert( имя ); // "Вася"
|
||||||
```
|
```
|
||||||
|
|
||||||
Технически, ошибки здесь нет, но на практике сложилась традиция использовать в именах только английские буквы.
|
Технически, ошибки здесь нет, но на практике сложилась традиция использовать в именах только английские буквы.
|
||||||
|
@ -152,7 +154,7 @@ alert(имя); // "Вася"
|
||||||
Например, такой пример выдаст синтаксическую ошибку:
|
Например, такой пример выдаст синтаксическую ошибку:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var return = 5; // ошибка
|
var return = 5; // ошибка
|
||||||
alert(return);
|
alert(return);
|
||||||
```
|
```
|
||||||
|
@ -205,7 +207,7 @@ num = 5; // ошибки не будет, так как строгий режи
|
||||||
*!*
|
*!*
|
||||||
test = 5; // здесь будет ошибка!
|
test = 5; // здесь будет ошибка!
|
||||||
*/!*
|
*/!*
|
||||||
alert(test); // не сработает
|
alert( test ); // не сработает
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -230,7 +232,7 @@ var COLOR_BLUE = "#00F";
|
||||||
var COLOR_ORANGE = "#FF7F00";
|
var COLOR_ORANGE = "#FF7F00";
|
||||||
|
|
||||||
var color = COLOR_ORANGE;
|
var color = COLOR_ORANGE;
|
||||||
alert(color); // #FF7F00
|
alert( color ); // #FF7F00
|
||||||
```
|
```
|
||||||
|
|
||||||
Технически, константа является обычной переменной, то есть её *можно* изменить. Но мы *договариваемся* этого не делать.
|
Технически, константа является обычной переменной, то есть её *можно* изменить. Но мы *договариваемся* этого не делать.
|
||||||
|
|
|
@ -10,7 +10,9 @@
|
||||||
|
|
||||||
Что такое это "развитие"? Это когда я вчера написал код, а сегодня (или спустя неделю) прихожу и хочу его поменять. Например, вывести сообщение не так, а эдак... Обработать товары по-другому, добавить функционал.. А где у меня там сообщение хранится? А где товар?...
|
Что такое это "развитие"? Это когда я вчера написал код, а сегодня (или спустя неделю) прихожу и хочу его поменять. Например, вывести сообщение не так, а эдак... Обработать товары по-другому, добавить функционал.. А где у меня там сообщение хранится? А где товар?...
|
||||||
|
|
||||||
**Гораздо проще найти нужные данные, если они правильно помечены, то есть когда переменная названа *правильно*.**
|
Гораздо проще найти нужные данные, если они правильно помечены, то есть когда переменная названа *правильно*.
|
||||||
|
|
||||||
|
## Правила именования
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>**Правило 1.**
|
<li>**Правило 1.**
|
||||||
|
@ -81,19 +83,19 @@ var border_left_width;
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
Позвольте поделиться одним небольшим секретом, который позволит улучшить ваши названия переменных и сэкономит вам время.
|
Позвольте поделиться одним небольшим секретом, который очень прост, но позволит улучшить названия переменных и сэкономит время.
|
||||||
|
|
||||||
Бывает так, что вы написали код, через некоторое время к нему возвращаетесь, и вам надо что-то поправить. Например, изменить какую-то рамку `border`...
|
Бывает так, что, написав код, мы через некоторое время к нему возвращаемся, надо что-то поправить. И мы примерно помним, что переменная, в которой хранится нужное вам значение, называется... Ну, скажем, `borderLeftWidth`. Мы ищем в её в коде, не находим, но, разобравшись, обнаруживаем, что на самом деле переменная называлась вот так: `leftBorderWidth`.
|
||||||
|
|
||||||
...И вы помните, что переменная, в которой хранится нужное вам значение, называется примерно так: `borderLeftWidth`. Вы ищете ее в коде, не находите, разбираетесь, и обнаруживаете, что на самом деле переменная называлась вот так: `leftBorderWidth`. После чего вносите нужные правки.
|
**Если мы ищем переменную с одним именем, а находим -- с другим, то зачастую самый лучший ход -- это *переименовать* переменную, чтобы имя было тем, которое вы искали.**
|
||||||
|
|
||||||
**Если вы искали переменную с одним именем, а нашли -- с другим, то самый лучший ход -- это *переименовать* переменную, чтобы имя было тем, которое вы искали.**
|
То есть, в коде `leftBorderWidth`, а мы её переименуем на ту, которую искали: `borderLeftWidth`.
|
||||||
|
|
||||||
То есть, у вас в коде `leftBorderWidth`, а вы ее переименовываете на `borderLeftWidth`.
|
|
||||||
|
|
||||||
Зачем? Дело в том, что в следующий раз, когда вы захотите что-то поправить, то вы будете искать по тому же самому имени. Соответственно, это сэкономит вам время.
|
Зачем? Дело в том, что в следующий раз, когда вы захотите что-то поправить, то вы будете искать по тому же самому имени. Соответственно, это сэкономит вам время.
|
||||||
|
|
||||||
Кроме того, поскольку именно это имя переменной пришло вам в голову -- скорее всего, оно больше соответствует хранимым там данным, чем то, которое вы придумали изначально. Исключения бывают, но в любом случае -- такое несовпадение -- это повод задуматься.
|
Есть причина и поважнее. Поскольку именно это имя переменной пришло в голову -- скорее всего, оно больше соответствует хранимым там данным, чем то, которое было мы придумали изначально. Исключения бывают, но в любом случае -- такое несовпадение -- это повод задуматься.
|
||||||
|
|
||||||
|
Чтобы удобно переименовывать переменную, нужно использовать [хороший редактор JavaScript](/editors), тогда этот процесс будет очень простым и быстрым.
|
||||||
|
|
||||||
[smart header="Если коротко..."]
|
[smart header="Если коротко..."]
|
||||||
Смысл имени переменной -- это "имя на коробке", по которому мы сможем максимально быстро находить нужные нам данные.
|
Смысл имени переменной -- это "имя на коробке", по которому мы сможем максимально быстро находить нужные нам данные.
|
||||||
|
|
|
@ -57,6 +57,7 @@ str = 'Одинарные кавычки тоже подойдут';
|
||||||
Как правило, такой тип используется для хранения значения типа да/нет, например:
|
Как правило, такой тип используется для хранения значения типа да/нет, например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
var checked = true; // поле формы помечено галочкой
|
var checked = true; // поле формы помечено галочкой
|
||||||
checked = false; // поле формы не содержит галочки
|
checked = false; // поле формы не содержит галочки
|
||||||
```
|
```
|
||||||
|
@ -84,7 +85,7 @@ var age = null;
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var x;
|
var x;
|
||||||
alert(x); // выведет "undefined"
|
alert( x ); // выведет "undefined"
|
||||||
```
|
```
|
||||||
|
|
||||||
Можно присвоить `undefined` и в явном виде, хотя это делается редко:
|
Можно присвоить `undefined` и в явном виде, хотя это делается редко:
|
||||||
|
@ -94,7 +95,7 @@ alert(x); // выведет "undefined"
|
||||||
var x = 123;
|
var x = 123;
|
||||||
x = undefined;
|
x = undefined;
|
||||||
|
|
||||||
alert(x); // "undefined"
|
alert( x ); // "undefined"
|
||||||
```
|
```
|
||||||
|
|
||||||
В явном виде `undefined` обычно не присваивают, так как это противоречит его смыслу. Для записи в переменную "пустого" или "неизвестного" значения используется `null`.
|
В явном виде `undefined` обычно не присваивают, так как это противоречит его смыслу. Для записи в переменную "пустого" или "неизвестного" значения используется `null`.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Разъяснения
|
# Разъяснения
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var a = 1, b = 1, c, d;
|
var a = 1, b = 1, c, d;
|
||||||
|
|
||||||
// префиксная форма сначала увеличивает a до 2, а потом возвращает
|
// префиксная форма сначала увеличивает a до 2, а потом возвращает
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
Посмотрите, понятно ли вам, почему код ниже работает именно так?
|
Посмотрите, понятно ли вам, почему код ниже работает именно так?
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var a = 1, b = 1, c, d;
|
var a = 1, b = 1, c, d;
|
||||||
|
|
||||||
c = ++a; alert(c); // 2
|
c = ++a; alert(c); // 2
|
||||||
|
|
|
@ -31,7 +31,7 @@ alert( x ); // -1, применили унарный минус
|
||||||
<li>*Бинарным* называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
|
<li>*Бинарным* называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var x = 1, y = 3;
|
var x = 1, y = 3;
|
||||||
alert( y - x ); // 2, бинарный минус
|
alert( y - x ); // 2, бинарный минус
|
||||||
```
|
```
|
||||||
|
@ -47,7 +47,7 @@ alert( y - x ); // 2, бинарный минус
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var a = "моя" + "строка";
|
var a = "моя" + "строка";
|
||||||
alert(a); // моястрока
|
alert( a ); // моястрока
|
||||||
```
|
```
|
||||||
|
|
||||||
Иначе говорят, что "плюс производит конкатенацию (сложение) строк".
|
Иначе говорят, что "плюс производит конкатенацию (сложение) строк".
|
||||||
|
@ -71,7 +71,7 @@ alert( 2 + '1' ); // "21"
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( 2 - '1' ); // 1
|
alert( 2 - '1' ); // 1
|
||||||
alert( 6 / '2'); // 3
|
alert( 6 / '2' ); // 3
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ alert( apples + oranges ); // "23", так как бинарный плюс ск
|
||||||
var apples = "2";
|
var apples = "2";
|
||||||
var oranges = "3";
|
var oranges = "3";
|
||||||
|
|
||||||
alert( +apples + +oranges); // 5, число, оба операнда предварительно преобразованы в числа
|
alert( +apples + +oranges ); // 5, число, оба операнда предварительно преобразованы в числа
|
||||||
```
|
```
|
||||||
|
|
||||||
С точки зрения математики такое изобилие плюсов может показаться странным. С точки зрения программирования -- никаких разночтений: сначала выполнятся унарные плюсы, приведут строки к числам, а затем -- бинарный `'+'` их сложит.
|
С точки зрения математики такое изобилие плюсов может показаться странным. С точки зрения программирования -- никаких разночтений: сначала выполнятся унарные плюсы, приведут строки к числам, а затем -- бинарный `'+'` их сложит.
|
||||||
|
@ -152,7 +152,7 @@ alert( +apples + +oranges); // 5, число, оба операнда предв
|
||||||
```js
|
```js
|
||||||
var x = 2 * 2 + 1;
|
var x = 2 * 2 + 1;
|
||||||
|
|
||||||
alert(x); // 5
|
alert( x ); // 5
|
||||||
```
|
```
|
||||||
|
|
||||||
**Возможно присваивание по цепочке:**
|
**Возможно присваивание по цепочке:**
|
||||||
|
@ -165,9 +165,9 @@ var a, b, c;
|
||||||
a = b = c = 2 + 2;
|
a = b = c = 2 + 2;
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(a); // 4
|
alert( a ); // 4
|
||||||
alert(b); // 4
|
alert( b ); // 4
|
||||||
alert(c); // 4
|
alert( c ); // 4
|
||||||
```
|
```
|
||||||
|
|
||||||
Такое присваивание работает справа-налево, то есть сначала вычислятся самое правое выражение `2+2`, присвоится в `c`, затем выполнится `b = c` и, наконец, `a = b`.
|
Такое присваивание работает справа-налево, то есть сначала вычислятся самое правое выражение `2+2`, присвоится в `c`, затем выполнится `b = c` и, наконец, `a = b`.
|
||||||
|
@ -186,8 +186,8 @@ var b = 2;
|
||||||
var c = 3 - (a = b + 1);
|
var c = 3 - (a = b + 1);
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(a); // 3
|
alert( a ); // 3
|
||||||
alert(c); // 0
|
alert( c ); // 0
|
||||||
```
|
```
|
||||||
|
|
||||||
В примере выше результатом `(a = b + 1)` является значение, которое записывается в `a` (т.е. `3`). Оно используется для вычисления `c`.
|
В примере выше результатом `(a = b + 1)` является значение, которое записывается в `a` (т.е. `3`). Оно используется для вычисления `c`.
|
||||||
|
@ -208,9 +208,9 @@ alert(c); // 0
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(5 % 2); // 1, остаток от деления 5 на 2
|
alert( 5 % 2 ); // 1, остаток от деления 5 на 2
|
||||||
alert(8 % 3); // 2, остаток от деления 8 на 3
|
alert( 8 % 3 ); // 2, остаток от деления 8 на 3
|
||||||
alert(6 % 3); // 0, остаток от деления 6 на 3
|
alert( 6 % 3 ); // 0, остаток от деления 6 на 3
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ alert(6 % 3); // 0, остаток от деления 6 на 3
|
||||||
<li>**Инкремент** `++` увеличивает на 1:
|
<li>**Инкремент** `++` увеличивает на 1:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var i = 2;
|
var i = 2;
|
||||||
i++; // более короткая запись для i = i + 1.
|
i++; // более короткая запись для i = i + 1.
|
||||||
alert(i); // 3
|
alert(i); // 3
|
||||||
|
@ -233,7 +233,7 @@ alert(i); // 3
|
||||||
<li>**Декремент** `--` уменьшает на 1:
|
<li>**Декремент** `--` уменьшает на 1:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var i = 2;
|
var i = 2;
|
||||||
i--; // более короткая запись для i = i - 1.
|
i--; // более короткая запись для i = i - 1.
|
||||||
alert(i); // 1
|
alert(i); // 1
|
||||||
|
@ -285,7 +285,7 @@ alert(a); // *!*1*/!*
|
||||||
var i = 0;
|
var i = 0;
|
||||||
i++;
|
i++;
|
||||||
++i;
|
++i;
|
||||||
alert(i); // 2
|
alert( i ); // 2
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -378,7 +378,7 @@ var n = 2;
|
||||||
n += 5; // теперь n=7 (работает как n = n + 5)
|
n += 5; // теперь n=7 (работает как n = n + 5)
|
||||||
n *= 2; // теперь n=14 (работает как n = n * 2)
|
n *= 2; // теперь n=14 (работает как n = n * 2)
|
||||||
|
|
||||||
alert(n); // 14
|
alert( n ); // 14
|
||||||
```
|
```
|
||||||
|
|
||||||
Так можно сделать для операторов `+,-,*,/` и бинарных `<<,>>,>>>,&,|,^`.
|
Так можно сделать для операторов `+,-,*,/` и бинарных `<<,>>,>>>,&,|,^`.
|
||||||
|
@ -390,7 +390,7 @@ alert(n); // 14
|
||||||
var n = 2;
|
var n = 2;
|
||||||
n *= 3 + 5;
|
n *= 3 + 5;
|
||||||
|
|
||||||
alert(n); // 16 (n = 2 * 8)
|
alert( n ); // 16 (n = 2 * 8)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -406,7 +406,7 @@ alert(n); // 16 (n = 2 * 8)
|
||||||
a = (5, 6);
|
a = (5, 6);
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(a);
|
alert( a );
|
||||||
```
|
```
|
||||||
|
|
||||||
Запятая позволяет перечислять выражения, разделяя их запятой `','`. Каждое из них -- вычисляется и отбрасывается, за исключением последнего, которое возвращается.
|
Запятая позволяет перечислять выражения, разделяя их запятой `','`. Каждое из них -- вычисляется и отбрасывается, за исключением последнего, которое возвращается.
|
||||||
|
|
|
@ -65,7 +65,7 @@ alert( 'Б' > 'А' ); // true
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert('а' > 'Я'); // true, строчные буквы больше прописных
|
alert( 'а' > 'Я' ); // true, строчные буквы больше прописных
|
||||||
```
|
```
|
||||||
|
|
||||||
Для корректного сравнения символы должны быть в одинаковом регистре.
|
Для корректного сравнения символы должны быть в одинаковом регистре.
|
||||||
|
@ -137,7 +137,7 @@ alert( +"2" > +"14" ); // false, теперь правильно
|
||||||
alert( '2' > 1 ); // true, сравнивается как 2 > 1
|
alert( '2' > 1 ); // true, сравнивается как 2 > 1
|
||||||
alert( '01' == 1 ); // true, сравнивается как 1 == 1
|
alert( '01' == 1 ); // true, сравнивается как 1 == 1
|
||||||
alert( false == 0 ); // true, false становится числом 0
|
alert( false == 0 ); // true, false становится числом 0
|
||||||
alert( true == 1); // true, так как true становится числом 1.
|
alert( true == 1 ); // true, так как true становится числом 1.
|
||||||
```
|
```
|
||||||
|
|
||||||
Тема преобразований типов будет продолжена далее, в главе [](/types-conversion).
|
Тема преобразований типов будет продолжена далее, в главе [](/types-conversion).
|
||||||
|
@ -148,7 +148,7 @@ alert( true == 1); // true, так как true становится числом
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(0 == false); // true
|
alert( 0 == false ); // true
|
||||||
```
|
```
|
||||||
|
|
||||||
Та же ситуация с пустой строкой:
|
Та же ситуация с пустой строкой:
|
||||||
|
@ -156,7 +156,7 @@ alert(0 == false); // true
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert('' == false); // true
|
alert( '' == false ); // true
|
||||||
```
|
```
|
||||||
|
|
||||||
Это естественное следствие того, что операнды разных типов преобразовались к числу. Пустая строка, как и `false`, при преобразовании к числу дают `0`.
|
Это естественное следствие того, что операнды разных типов преобразовались к числу. Пустая строка, как и `false`, при преобразовании к числу дают `0`.
|
||||||
|
@ -169,7 +169,7 @@ alert('' == false); // true
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(0 === false); // false, т.к. типы различны
|
alert( 0 === false ); // false, т.к. типы различны
|
||||||
```
|
```
|
||||||
|
|
||||||
Строгое сравнение предпочтительно, если мы хотим быть уверены, что "сюрпризов" не будет.
|
Строгое сравнение предпочтительно, если мы хотим быть уверены, что "сюрпризов" не будет.
|
||||||
|
@ -195,8 +195,8 @@ alert(0 === false); // false, т.к. типы различны
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(null > 0); // false
|
alert( null > 0 ); // false
|
||||||
alert(null == 0); // false
|
alert( null == 0 ); // false
|
||||||
```
|
```
|
||||||
|
|
||||||
Итак, мы получили, что `null` не больше и не равен нулю. А теперь...
|
Итак, мы получили, что `null` не больше и не равен нулю. А теперь...
|
||||||
|
@ -220,9 +220,9 @@ alert(null >= 0); // *!*true*/!*
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(undefined > 0); // false (1)
|
alert( undefined > 0 ); // false (1)
|
||||||
alert(undefined < 0); // false (2)
|
alert( undefined < 0 ); // false (2)
|
||||||
alert(undefined == 0); // false (3)
|
alert( undefined == 0 ); // false (3)
|
||||||
```
|
```
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -185,7 +185,7 @@ function pow(x, n) {
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
// результат будет виден в консоли
|
// результат будет виден в консоли
|
||||||
for(var i=0; i<5; i++) {
|
for (var i = 0; i < 5; i++) {
|
||||||
console.log("значение", i);
|
console.log("значение", i);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
Вы могли заметить следующие недостатки, сверху-вниз:
|
Вы могли заметить следующие недостатки, сверху-вниз:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
function pow(x,n) // <- отсутствует пробел между аргументами
|
function pow(x,n) // <- отсутствует пробел между аргументами
|
||||||
{ // <- фигурная скобка на отдельной строке
|
{ // <- фигурная скобка на отдельной строке
|
||||||
var result=1; // <- нет пробелов вокруг знака =
|
var result=1; // <- нет пробелов вокруг знака =
|
||||||
|
@ -30,8 +31,8 @@ else // <- можно на одной строке } else {
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
var result = 1;
|
var result = 1;
|
||||||
|
|
||||||
for(var i = 0; i < n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
result *=x;
|
result *= x;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
Какие недостатки вы видите в стиле этого примера?
|
Какие недостатки вы видите в стиле этого примера?
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
function pow(x,n)
|
function pow(x,n)
|
||||||
{
|
{
|
||||||
var result=1;
|
var result=1;
|
||||||
|
|
|
@ -41,6 +41,7 @@ if (n < 0) {
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
if (n < 0) {alert('Степень ' + n + ' не поддерживается');}
|
if (n < 0) {alert('Степень ' + n + ' не поддерживается');}
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,6 +80,7 @@ if (n < 0) {
|
||||||
|
|
||||||
Например, выровнять аргументы относительно открывающей скобки:
|
Например, выровнять аргументы относительно открывающей скобки:
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
show("Строки" +
|
show("Строки" +
|
||||||
" выровнены" +
|
" выровнены" +
|
||||||
" строго" +
|
" строго" +
|
||||||
|
@ -94,12 +96,11 @@ function pow(x, n) {
|
||||||
var result = 1;
|
var result = 1;
|
||||||
// <--
|
// <--
|
||||||
for (var i = 0; i < n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
result *=x;
|
result *= x;
|
||||||
}
|
}
|
||||||
// <--
|
// <--
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Вставляйте дополнительный перевод строки туда, где это сделает код более читаемым. Не должно быть более 9 строк кода подряд без вертикального отступа.
|
Вставляйте дополнительный перевод строки туда, где это сделает код более читаемым. Не должно быть более 9 строк кода подряд без вертикального отступа.
|
||||||
|
@ -133,7 +134,7 @@ function pow(x, n) {
|
||||||
Вместо:
|
Вместо:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
for (var i=0; i<10; i++) {
|
for (var i = 0; i < 10; i++) {
|
||||||
if (i подходит) {
|
if (i подходит) {
|
||||||
... // <- уровень вложенности 2
|
... // <- уровень вложенности 2
|
||||||
}
|
}
|
||||||
|
@ -209,14 +210,13 @@ function isEven(n) { // проверка чётности
|
||||||
|
|
||||||
```js
|
```js
|
||||||
function showPrimes(n) {
|
function showPrimes(n) {
|
||||||
nextPrime:
|
nextPrime: for (var i = 2; i < n; i++) {
|
||||||
for (var i=2; i<n; i++) {
|
|
||||||
|
|
||||||
for (var j=2; j<i; j++) {
|
for (var j = 2; j < i; j++) {
|
||||||
if ( i % j == 0) continue nextPrime;
|
if (i % j == 0) continue nextPrime;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert(i); // простое
|
alert( i ); // простое
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -92,7 +92,7 @@ div.append('<span/>');
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// код из jQuery
|
// код из jQuery
|
||||||
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
|
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
|
||||||
```
|
```
|
||||||
|
|
||||||
Разработчик, встретивший эту строку и попытавшийся понять, чему же всё-таки равно `i`, скорее всего придёт к вам за разъяснениями. Смело скажите ему, что короче -- это всегда лучше. Посвятите и его в пути ниндзя. Не забудьте вручить [Дао дэ цзин](http://lib.ru/POECHIN/lao1.txt).
|
Разработчик, встретивший эту строку и попытавшийся понять, чему же всё-таки равно `i`, скорее всего придёт к вам за разъяснениями. Смело скажите ему, что короче -- это всегда лучше. Посвятите и его в пути ниндзя. Не забудьте вручить [Дао дэ цзин](http://lib.ru/POECHIN/lao1.txt).
|
||||||
|
|
|
@ -8,7 +8,7 @@ function pow(x, n) {
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
var result = 1;
|
var result = 1;
|
||||||
for(var i=0; i<n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
result *= x;
|
result *= x;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
it("любое число в степени 0 равно 1", function() {
|
it("любое число в степени 0 равно 1", function() {
|
||||||
assert.equal( pow(123, 0), 1);
|
assert.equal(pow(123, 0), 1);
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -15,11 +15,11 @@ describe("любое число, кроме нуля, в степени 0 рав
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
it("при возведении " + x + " в степень 0 результат: 1", function() {
|
it("при возведении " + x + " в степень 0 результат: 1", function() {
|
||||||
assert.equal( pow(x, 0), 1);
|
assert.equal(pow(x, 0), 1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = -5; x <= 5; x+=2) {
|
for (var x = -5; x <= 5; x += 2) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ describe("любое число, кроме нуля, в степени 0 рав
|
||||||
И не забудем добавить отдельный тест для нуля:
|
И не забудем добавить отдельный тест для нуля:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
...
|
...
|
||||||
it("ноль в нулевой степени даёт NaN", function() {
|
it("ноль в нулевой степени даёт NaN", function() {
|
||||||
assert( isNaN(pow(0,0), "0 в степени 0 не NaN");
|
assert( isNaN(pow(0,0), "0 в степени 0 не NaN");
|
||||||
|
|
|
@ -11,15 +11,15 @@
|
||||||
```js
|
```js
|
||||||
describe("Возводит x в степень n", function() {
|
describe("Возводит x в степень n", function() {
|
||||||
it("5 в степени 1 равно 5", function() {
|
it("5 в степени 1 равно 5", function() {
|
||||||
assert.equal( pow(5, 1), 5 );
|
assert.equal(pow(5, 1), 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("5 в степени 2 равно 25", function() {
|
it("5 в степени 2 равно 25", function() {
|
||||||
assert.equal( pow(5, 2), 25 );
|
assert.equal(pow(5, 2), 25);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("5 в степени 3 равно 125", function() {
|
it("5 в степени 3 равно 125", function() {
|
||||||
assert.equal( pow(5, 3), 25 );
|
assert.equal(pow(5, 3), 25);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
|
@ -9,13 +9,13 @@ it("Возводит x в степень n", function() {
|
||||||
var x = 5;
|
var x = 5;
|
||||||
|
|
||||||
var result = x;
|
var result = x;
|
||||||
assert.equal( pow(x, 1), result );
|
assert.equal(pow(x, 1), result);
|
||||||
|
|
||||||
var result *= x;
|
var result *= x;
|
||||||
assert.equal( pow(x, 2), result );
|
assert.equal(pow(x, 2), result);
|
||||||
|
|
||||||
var result *= x;
|
var result *= x;
|
||||||
assert.equal( pow(x, 3), result );
|
assert.equal(pow(x, 3), result);
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ BDD -- это не просто тесты. Это гораздо больше.
|
||||||
describe("pow", function() {
|
describe("pow", function() {
|
||||||
|
|
||||||
it("возводит в n-ю степень", function() {
|
it("возводит в n-ю степень", function() {
|
||||||
assert.equal( pow(2, 3), 8);
|
assert.equal(pow(2, 3), 8);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -150,9 +150,9 @@ function pow() {
|
||||||
describe("pow", function() {
|
describe("pow", function() {
|
||||||
|
|
||||||
it("возводит в n-ю степень", function() {
|
it("возводит в n-ю степень", function() {
|
||||||
assert.equal( pow(2, 3), 8);
|
assert.equal(pow(2, 3), 8);
|
||||||
*!*
|
*!*
|
||||||
assert.equal( pow(3, 4), 81);
|
assert.equal(pow(3, 4), 81);
|
||||||
*/!*
|
*/!*
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -166,11 +166,11 @@ describe("pow", function() {
|
||||||
describe("pow", function() {
|
describe("pow", function() {
|
||||||
|
|
||||||
it("при возведении 2 в 3ю степень результат 8", function() {
|
it("при возведении 2 в 3ю степень результат 8", function() {
|
||||||
assert.equal( pow(2, 3), 8);
|
assert.equal(pow(2, 3), 8);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении 3 в 4ю степень равен 81", function() {
|
it("при возведении 3 в 4ю степень равен 81", function() {
|
||||||
assert.equal( pow(3, 4), 81);
|
assert.equal(pow(3, 4), 81);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -204,7 +204,7 @@ describe("pow", function() {
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
var result = 1;
|
var result = 1;
|
||||||
|
|
||||||
for(var i = 0; i < n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
result *= x;
|
result *= x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,13 +218,13 @@ function pow(x, n) {
|
||||||
describe("pow", function() {
|
describe("pow", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,13 +249,13 @@ describe("pow", function() {
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,6 +279,7 @@ describe("pow", function() {
|
||||||
Например:
|
Например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
describe("Тест", function() {
|
describe("Тест", function() {
|
||||||
|
|
||||||
before(function() { alert("Начало тестов"); });
|
before(function() { alert("Начало тестов"); });
|
||||||
|
@ -328,13 +329,13 @@ describe("pow", function() {
|
||||||
|
|
||||||
it("при возведении в отрицательную степень результат NaN", function() {
|
it("при возведении в отрицательную степень результат NaN", function() {
|
||||||
*!*
|
*!*
|
||||||
assert( isNaN( pow(2, -1) ) );
|
assert(isNaN(pow(2, -1)));
|
||||||
*/!*
|
*/!*
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в дробную степень результат NaN", function() {
|
it("при возведении в дробную степень результат NaN", function() {
|
||||||
*!*
|
*!*
|
||||||
assert( isNaN( pow(2, 1.5) ) );
|
assert(isNaN(pow(2, 1.5)));
|
||||||
*/!*
|
*/!*
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -385,13 +386,13 @@ describe("pow", function() {
|
||||||
|
|
||||||
it("при возведении в отрицательную степень результат NaN", function() {
|
it("при возведении в отрицательную степень результат NaN", function() {
|
||||||
*!*
|
*!*
|
||||||
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" );
|
assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
|
||||||
*/!*
|
*/!*
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в дробную степень результат NaN", function() {
|
it("при возведении в дробную степень результат NaN", function() {
|
||||||
*!*
|
*!*
|
||||||
assert( isNaN( pow(2, 1.5) ), "pow(2, 1.5) не NaN" );
|
assert(isNaN(pow(2, 1.5)), "pow(2, 1.5) не NaN");
|
||||||
*/!*
|
*/!*
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -94,8 +94,8 @@ alert( 12.34.toFixed(1) ); // 12.3
|
||||||
...Но если число целое, то будет проблема:
|
...Но если число целое, то будет проблема:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
alert( 12.toFixed(1) ); // ошибка!
|
alert(12.toFixed(1)); // ошибка!
|
||||||
```
|
```
|
||||||
|
|
||||||
Ошибка произойдёт потому, что JavaScript ожидает десятичную дробь после точки.
|
Ошибка произойдёт потому, что JavaScript ожидает десятичную дробь после точки.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function f(x) {
|
function f(x) {
|
||||||
alert(arguments.length ? 1 : 0);
|
alert( arguments.length ? 1 : 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
f(undefined);
|
f(undefined);
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
function sum() {
|
function sum() {
|
||||||
var result = 0;
|
var result = 0;
|
||||||
|
|
||||||
for(var i=0; i<arguments.length; i++) {
|
for (var i = 0; i < arguments.length; i++) {
|
||||||
result += arguments[i];
|
result += arguments[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
sum() = 0
|
sum() = 0
|
||||||
sum(1) = 1
|
sum(1) = 1
|
||||||
sum(1, 2) = 3
|
sum(1, 2) = 3
|
||||||
sum(1, 2 ,3) = 6
|
sum(1, 2, 3) = 6
|
||||||
sum(1, 2, 3, 4) = 10
|
sum(1, 2, 3, 4) = 10
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
Например:
|
Например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
function go(a,b) {
|
function go(a,b) {
|
||||||
alert("a="+a+", b="+b);
|
alert("a="+a+", b="+b);
|
||||||
}
|
}
|
||||||
|
@ -25,13 +25,13 @@ function log(a) {
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
|
||||||
function log(a,b,c) {
|
function log(a, b, c) {
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
log(a); // вызовется первая функция
|
log(a); // вызовется первая функция
|
||||||
log(a,b,c); // вызовется вторая функция
|
log(a, b, c); // вызовется вторая функция
|
||||||
*/!*
|
*/!*
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -57,8 +57,8 @@ log(a,b,c); // вызовется вторая функция
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function sayHi() {
|
function sayHi() {
|
||||||
for (var i=0; i<arguments.length; i++) {
|
for (var i = 0; i < arguments.length; i++) {
|
||||||
alert("Привет, " + arguments[i]);
|
alert( "Привет, " + arguments[i] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ sayHi("Винни", "Пятачок"); // 'Привет, Винни', 'Прив
|
||||||
//+ run
|
//+ run
|
||||||
function f(x) {
|
function f(x) {
|
||||||
arguments[0] = 5; // меняет переменную x
|
arguments[0] = 5; // меняет переменную x
|
||||||
alert(x); // 5
|
alert( x ); // 5
|
||||||
}
|
}
|
||||||
|
|
||||||
f(1);
|
f(1);
|
||||||
|
@ -92,7 +92,7 @@ f(1);
|
||||||
//+ run
|
//+ run
|
||||||
function f(x) {
|
function f(x) {
|
||||||
x = 5;
|
x = 5;
|
||||||
alert(arguments[0]); // 5, обновленный x
|
alert( arguments[0] ); // 5, обновленный x
|
||||||
}
|
}
|
||||||
|
|
||||||
f(1);
|
f(1);
|
||||||
|
@ -106,7 +106,7 @@ function f(x) {
|
||||||
"use strict"; // для браузеров с поддержкой строгого режима
|
"use strict"; // для браузеров с поддержкой строгого режима
|
||||||
|
|
||||||
arguments[0] = 5;
|
arguments[0] = 5;
|
||||||
alert(x); // не 5, а 1! Переменная "отвязана" от arguments
|
alert( x ); // не 5, а 1! Переменная "отвязана" от arguments
|
||||||
}
|
}
|
||||||
|
|
||||||
f(1);
|
f(1);
|
||||||
|
@ -137,7 +137,7 @@ sayHi(1);
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var args = [];
|
var args = [];
|
||||||
for(var i=0; i<arguments.length; i++) {
|
for (var i = 0; i < arguments.length; i++) {
|
||||||
args[i] = arguments[i];
|
args[i] = arguments[i];
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -183,8 +183,8 @@ var student = {
|
||||||
copy(vasya, user, student);
|
copy(vasya, user, student);
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(vasya.isAdmin); // false
|
alert( vasya.isAdmin ); // false
|
||||||
alert(vasya.university); // My university
|
alert( vasya.university ); // My university
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -207,7 +207,7 @@ var userClone = copy({}, user);
|
||||||
function copy() {
|
function copy() {
|
||||||
var dst = arguments[0];
|
var dst = arguments[0];
|
||||||
|
|
||||||
for (var i=1; i<arguments.length; i++) {
|
for (var i = 1; i < arguments.length; i++) {
|
||||||
var arg = arguments[i];
|
var arg = arguments[i];
|
||||||
for (var key in arg) {
|
for (var key in arg) {
|
||||||
dst[key] = arg[key];
|
dst[key] = arg[key];
|
||||||
|
@ -225,7 +225,7 @@ function copy() {
|
||||||
function copy(dst) {
|
function copy(dst) {
|
||||||
*/!*
|
*/!*
|
||||||
// остальные аргументы остаются безымянными
|
// остальные аргументы остаются безымянными
|
||||||
for (var i=1; i<arguments.length; i++) {
|
for (var i = 1; i < arguments.length; i++) {
|
||||||
var arg = arguments[i];
|
var arg = arguments[i];
|
||||||
for (var key in arg) {
|
for (var key in arg) {
|
||||||
dst[key] = arg[key];
|
dst[key] = arg[key];
|
||||||
|
@ -391,17 +391,17 @@ var factorial = function(n) {
|
||||||
f1();
|
f1();
|
||||||
|
|
||||||
function f1() {
|
function f1() {
|
||||||
alert(arguments.callee.caller); // null, меня вызвали из глобального кода
|
alert( arguments.callee.caller ); // null, меня вызвали из глобального кода
|
||||||
f2();
|
f2();
|
||||||
}
|
}
|
||||||
|
|
||||||
function f2() {
|
function f2() {
|
||||||
alert(arguments.callee.caller); // f1, функция, из которой меня вызвали
|
alert( arguments.callee.caller ); // f1, функция, из которой меня вызвали
|
||||||
f3();
|
f3();
|
||||||
}
|
}
|
||||||
|
|
||||||
function f3() {
|
function f3() {
|
||||||
alert(arguments.callee.caller); // f2, функция, из которой меня вызвали
|
alert( arguments.callee.caller ); // f2, функция, из которой меня вызвали
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,6 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var d = new Date(2012, 1, 20, 3, 12);
|
var d = new Date(2012, 1, 20, 3, 12);
|
||||||
alert(d);
|
alert( d );
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function getWeekDay(date) {
|
function getWeekDay(date) {
|
||||||
var days = ['вс','пн','вт','ср','чт','пт','сб'] ;
|
var days = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'];
|
||||||
|
|
||||||
return days[ date.getDay() ];
|
return days[date.getDay()];
|
||||||
}
|
}
|
||||||
|
|
||||||
var date = new Date(2014,0,3); // 3 января 2014
|
var date = new Date(2014, 0, 3); // 3 января 2014
|
||||||
alert( getWeekDay(date) ); // 'пт'
|
alert( getWeekDay(date) ); // 'пт'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
Например:
|
Например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
var date = new Date(2012,0,3); // 3 января 2012
|
var date = new Date(2012,0,3); // 3 января 2012
|
||||||
alert( getWeekDay(date) ); // Должно вывести 'вт'
|
alert( getWeekDay(date) ); // Должно вывести 'вт'
|
||||||
```
|
```
|
||||||
|
|
|
@ -6,14 +6,14 @@ function getLocalDay(date) {
|
||||||
|
|
||||||
var day = date.getDay();
|
var day = date.getDay();
|
||||||
|
|
||||||
if ( day == 0 ) { // день 0 становится 7
|
if (day == 0) { // день 0 становится 7
|
||||||
day = 7;
|
day = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
return day;
|
return day;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( getLocalDay(new Date(2012,0,3)) ); // 2
|
alert( getLocalDay(new Date(2012, 0, 3)) ); // 2
|
||||||
```
|
```
|
||||||
|
|
||||||
Если удобнее, чтобы день недели начинался с нуля, то можно возвращать в функции `day - 1`, тогда дни будут от 0 (пн) до 6(вс).
|
Если удобнее, чтобы день недели начинался с нуля, то можно возвращать в функции `day - 1`, тогда дни будут от 0 (пн) до 6(вс).
|
|
@ -7,6 +7,7 @@
|
||||||
День нужно возвратить в европейской нумерации, т.е. понедельник имеет номер 1, вторник номер 2, ..., воскресенье - номер 7.
|
День нужно возвратить в европейской нумерации, т.е. понедельник имеет номер 1, вторник номер 2, ..., воскресенье - номер 7.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
var date = new Date(2012, 0, 3); // 3 янв 2012
|
var date = new Date(2012, 0, 3); // 3 янв 2012
|
||||||
alert( getLocalDay(date) ); // вторник, выведет 2
|
alert( getLocalDay(date) ); // вторник, выведет 2
|
||||||
```
|
```
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
function getDateAgo(date, days) {
|
function getDateAgo(date, days) {
|
||||||
date.setDate( date.getDate() - days );
|
date.setDate(date.getDate() - days);
|
||||||
return date.getDate();
|
return date.getDate();
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -16,7 +16,7 @@ function getDateAgo(date, days) {
|
||||||
function getDateAgo(date, days) {
|
function getDateAgo(date, days) {
|
||||||
var dateCopy = new Date(date);
|
var dateCopy = new Date(date);
|
||||||
|
|
||||||
dateCopy.setDate( date.getDate() - days );
|
dateCopy.setDate(date.getDate() - days);
|
||||||
return dateCopy.getDate();
|
return dateCopy.getDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function getLastDayOfMonth(year, month) {
|
function getLastDayOfMonth(year, month) {
|
||||||
var date = new Date(year, month+1, 0);
|
var date = new Date(year, month + 1, 0);
|
||||||
return date.getDate();
|
return date.getDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ alert( getSecondsToday() );
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function getSecondsToday(){
|
function getSecondsToday() {
|
||||||
var d = new Date();
|
var d = new Date();
|
||||||
return d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds();
|
return d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds();
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var dd = date.getDate();
|
var dd = date.getDate();
|
||||||
if (dd<10) dd= '0'+dd;
|
if (dd < 10) dd = '0' + dd;
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -12,7 +12,7 @@ if (dd<10) dd= '0'+dd;
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var mm = date.getMonth() + 1; // месяц 1-12
|
var mm = date.getMonth() + 1; // месяц 1-12
|
||||||
if (mm<10) mm= '0'+mm;
|
if (mm < 10) mm = '0' + mm;
|
||||||
```
|
```
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -20,7 +20,7 @@ if (mm<10) mm= '0'+mm;
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var yy = date.getFullYear() % 100;
|
var yy = date.getFullYear() % 100;
|
||||||
if (yy<10) yy= '0'+yy;
|
if (yy < 10) yy = '0' + yy;
|
||||||
```
|
```
|
||||||
|
|
||||||
Заметим, что год, как и другие компоненты, может понадобиться дополнить нулем слева, причем возможно что `yy == 0` (например, 2000 год). При сложении со строкой `0+'0' == '00'`, так что будет все в порядке.
|
Заметим, что год, как и другие компоненты, может понадобиться дополнить нулем слева, причем возможно что `yy == 0` (например, 2000 год). При сложении со строкой `0+'0' == '00'`, так что будет все в порядке.
|
||||||
|
@ -34,15 +34,15 @@ if (yy<10) yy= '0'+yy;
|
||||||
function formatDate(date) {
|
function formatDate(date) {
|
||||||
|
|
||||||
var dd = date.getDate();
|
var dd = date.getDate();
|
||||||
if ( dd < 10 ) dd = '0' + dd;
|
if (dd < 10) dd = '0' + dd;
|
||||||
|
|
||||||
var mm = date.getMonth()+1;
|
var mm = date.getMonth() + 1;
|
||||||
if ( mm < 10 ) mm = '0' + mm;
|
if (mm < 10) mm = '0' + mm;
|
||||||
|
|
||||||
var yy = date.getFullYear() % 100;
|
var yy = date.getFullYear() % 100;
|
||||||
if ( yy < 10 ) yy = '0' + yy;
|
if (yy < 10) yy = '0' + yy;
|
||||||
|
|
||||||
return dd+'.'+mm+'.'+yy;
|
return dd + '.' + mm + '.' + yy;
|
||||||
}
|
}
|
||||||
|
|
||||||
var d = new Date(2014, 0, 30); // 30 Янв 2014
|
var d = new Date(2014, 0, 30); // 30 Янв 2014
|
||||||
|
|
|
@ -9,13 +9,13 @@ function formatDate(date) {
|
||||||
return 'только что';
|
return 'только что';
|
||||||
}
|
}
|
||||||
|
|
||||||
var sec = Math.floor( diff / 1000 ); // округлить diff до секунд
|
var sec = Math.floor(diff / 1000); // округлить diff до секунд
|
||||||
|
|
||||||
if (sec < 60) {
|
if (sec < 60) {
|
||||||
return sec + ' сек. назад';
|
return sec + ' сек. назад';
|
||||||
}
|
}
|
||||||
|
|
||||||
var min = Math.floor( diff / 60000 ); // округлить diff до минут
|
var min = Math.floor(diff / 60000); // округлить diff до минут
|
||||||
if (min < 60) {
|
if (min < 60) {
|
||||||
return min + ' мин. назад';
|
return min + ' мин. назад';
|
||||||
}
|
}
|
||||||
|
@ -23,26 +23,26 @@ function formatDate(date) {
|
||||||
// форматировать дату, с учетом того, что месяцы начинаются с 0
|
// форматировать дату, с учетом того, что месяцы начинаются с 0
|
||||||
var d = date;
|
var d = date;
|
||||||
d = [
|
d = [
|
||||||
'0'+d.getDate(),
|
'0' + d.getDate(),
|
||||||
'0'+(d.getMonth()+1),
|
'0' + (d.getMonth() + 1),
|
||||||
''+d.getFullYear(),
|
'' + d.getFullYear(),
|
||||||
'0'+d.getHours(),
|
'0' + d.getHours(),
|
||||||
'0'+d.getMinutes()
|
'0' + d.getMinutes()
|
||||||
];
|
];
|
||||||
|
|
||||||
for(var i=0; i<d.length; i++) {
|
for (var i = 0; i < d.length; i++) {
|
||||||
d[i] = d[i].slice(-2);
|
d[i] = d[i].slice(-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return d.slice(0,3).join('.')+' '+d.slice(3).join(':');
|
return d.slice(0, 3).join('.') + ' ' + d.slice(3).join(':');
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( formatDate( new Date( new Date - 1) ) ); // только что
|
alert( formatDate(new Date(new Date - 1)) ); // только что
|
||||||
|
|
||||||
alert( formatDate( new Date( new Date - 30*1000) ) ); // 30 сек. назад
|
alert( formatDate(new Date(new Date - 30 * 1000)) ); // 30 сек. назад
|
||||||
|
|
||||||
alert( formatDate( new Date( new Date- 5*60*1000) ) ); // 5 мин. назад
|
alert( formatDate(new Date(new Date - 5 * 60 * 1000)) ); // 5 мин. назад
|
||||||
|
|
||||||
alert( formatDate( new Date( new Date - 86400*1000) ) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
alert( formatDate(new Date(new Date - 86400 * 1000)) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -15,12 +15,12 @@
|
||||||
```js
|
```js
|
||||||
function formatDate(date) { /* ваш код */ }
|
function formatDate(date) { /* ваш код */ }
|
||||||
|
|
||||||
alert( formatDate( new Date(new Date - 1) ) ); // "только что"
|
alert( formatDate(new Date(new Date - 1)) ); // "только что"
|
||||||
|
|
||||||
alert( formatDate( new Date(new Date - 30*1000) ) ); // "30 сек. назад"
|
alert( formatDate(new Date(new Date - 30 * 1000)) ); // "30 сек. назад"
|
||||||
|
|
||||||
alert( formatDate( new Date(new Date- 5*60*1000) ) ); // "5 мин. назад"
|
alert( formatDate(new Date(new Date - 5 * 60 * 1000)) ); // "5 мин. назад"
|
||||||
|
|
||||||
alert( formatDate( new Date(new Date - 86400*1000) ) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
alert( formatDate(new Date(new Date - 86400 * 1000)) ); // вчерашняя дата в формате "дд.мм.гг чч:мм"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var now = new Date();
|
var now = new Date();
|
||||||
alert(now);
|
alert( now );
|
||||||
```
|
```
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -23,7 +23,7 @@ alert(now);
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
// 24 часа после 01.01.1970 GMT+0
|
// 24 часа после 01.01.1970 GMT+0
|
||||||
var Jan02_1970 = new Date(3600*24*1000);
|
var Jan02_1970 = new Date(3600 * 24 * 1000);
|
||||||
alert( Jan02_1970 );
|
alert( Jan02_1970 );
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ new Date(2011, 0, 1); // то же самое, часы/секунды по ум
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var date = new Date(2011, 0, 1, 2, 3, 4, 567);
|
var date = new Date(2011, 0, 1, 2, 3, 4, 567);
|
||||||
alert(date); // 1.01.2011, 02:03:04.567
|
alert( date ); // 1.01.2011, 02:03:04.567
|
||||||
```
|
```
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -145,7 +145,7 @@ today.setHours(0);
|
||||||
alert( today ); // сегодня, но час изменён на 0
|
alert( today ); // сегодня, но час изменён на 0
|
||||||
|
|
||||||
today.setHours(0, 0, 0, 0);
|
today.setHours(0, 0, 0, 0);
|
||||||
alert (today ); // сегодня, ровно 00:00:00.
|
alert( today ); // сегодня, ровно 00:00:00.
|
||||||
```
|
```
|
||||||
|
|
||||||
### Автоисправление даты
|
### Автоисправление даты
|
||||||
|
@ -166,10 +166,10 @@ alert(d); // ... это 1 февраля 2013!
|
||||||
//+ run
|
//+ run
|
||||||
var d = new Date(2011, 1, 28);
|
var d = new Date(2011, 1, 28);
|
||||||
*!*
|
*!*
|
||||||
d.setDate( d.getDate() + 2 );
|
d.setDate(d.getDate() + 2);
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert(d); // 2 марта, 2011
|
alert( d ); // 2 марта, 2011
|
||||||
```
|
```
|
||||||
|
|
||||||
Также это используют для получения даты, отдаленной от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:
|
Также это используют для получения даты, отдаленной от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:
|
||||||
|
@ -177,9 +177,9 @@ alert(d); // 2 марта, 2011
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var d = new Date();
|
var d = new Date();
|
||||||
d.setSeconds( d.getSeconds()+70);
|
d.setSeconds(d.getSeconds() + 70);
|
||||||
|
|
||||||
alert(d); // выведет корректную дату
|
alert( d ); // выведет корректную дату
|
||||||
```
|
```
|
||||||
|
|
||||||
Можно установить и нулевые, и даже отрицательные компоненты. Например:
|
Можно установить и нулевые, и даже отрицательные компоненты. Например:
|
||||||
|
@ -189,10 +189,10 @@ alert(d); // выведет корректную дату
|
||||||
var d = new Date;
|
var d = new Date;
|
||||||
|
|
||||||
d.setDate(1); // поставить первое число месяца
|
d.setDate(1); // поставить первое число месяца
|
||||||
alert(d);
|
alert( d );
|
||||||
|
|
||||||
d.setDate(0); // нулевого числа нет, будет последнее число предыдущего месяца
|
d.setDate(0); // нулевого числа нет, будет последнее число предыдущего месяца
|
||||||
alert(d);
|
alert( d );
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ alert(d);
|
||||||
var d = new Date;
|
var d = new Date;
|
||||||
|
|
||||||
d.setDate(-1); // предпоследнее число предыдущего месяца
|
d.setDate(-1); // предпоследнее число предыдущего месяца
|
||||||
alert(d);
|
alert( d );
|
||||||
```
|
```
|
||||||
|
|
||||||
### Преобразование к числу, разность дат
|
### Преобразование к числу, разность дат
|
||||||
|
@ -211,7 +211,7 @@ alert(d);
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( +new Date ) // +date то же самое, что: +date.valueOf()
|
alert(+new Date) // +date то же самое, что: +date.valueOf()
|
||||||
```
|
```
|
||||||
|
|
||||||
**Важный побочный эффект: даты можно вычитать, результат вычитания объектов `Date` -- их временная разница, в миллисекундах**.
|
**Важный побочный эффект: даты можно вычитать, результат вычитания объектов `Date` -- их временная разница, в миллисекундах**.
|
||||||
|
@ -223,13 +223,13 @@ alert( +new Date ) // +date то же самое, что: +date.valueOf()
|
||||||
var start = new Date; // засекли время
|
var start = new Date; // засекли время
|
||||||
|
|
||||||
// что-то сделать
|
// что-то сделать
|
||||||
for (var i=0; i<100000; i++) {
|
for (var i = 0; i < 100000; i++) {
|
||||||
var doSomething = i*i*i;
|
var doSomething = i * i * i;
|
||||||
}
|
}
|
||||||
|
|
||||||
var end = new Date; // конец измерения
|
var end = new Date; // конец измерения
|
||||||
|
|
||||||
alert("Цикл занял " + (end-start) + " ms");
|
alert( "Цикл занял " + (end - start) + " ms" );
|
||||||
```
|
```
|
||||||
|
|
||||||
### Бенчмаркинг
|
### Бенчмаркинг
|
||||||
|
@ -242,11 +242,11 @@ alert("Цикл занял " + (end-start) + " ms");
|
||||||
|
|
||||||
```js
|
```js
|
||||||
function walkIn(arr) {
|
function walkIn(arr) {
|
||||||
for(var key in arr) arr[i]++
|
for (var key in arr) arr[i]++
|
||||||
}
|
}
|
||||||
|
|
||||||
function walkLength(arr) {
|
function walkLength(arr) {
|
||||||
for(var i=0; i<arr.length; i++) arr[i]++;
|
for (var i = 0; i < arr.length; i++) arr[i]++;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -259,19 +259,24 @@ function walkLength(arr) {
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for(var i=0; i<1000; i++) arr[i] = 0;
|
for (var i = 0; i < 1000; i++) arr[i] = 0;
|
||||||
|
|
||||||
function walkIn(arr) { for(var key in arr) arr[i]++; }
|
function walkIn(arr) {
|
||||||
function walkLength(arr) { for(var i=0; i<arr.length; i++) arr[i]++; }
|
for (var key in arr) arr[i]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
function walkLength(arr) {
|
||||||
|
for (var i = 0; i < arr.length; i++) arr[i]++;
|
||||||
|
}
|
||||||
|
|
||||||
function bench(f) {
|
function bench(f) {
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
for (var i=0; i<10000; i++) f(arr);
|
for (var i = 0; i < 10000; i++) f(arr);
|
||||||
return new Date() - date;
|
return new Date() - date;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert('Время walkIn: ' + bench(walkIn) + 'мс');
|
alert( 'Время walkIn: ' + bench(walkIn) + 'мс' );
|
||||||
alert('Время walkLength: ' + bench(walkLength) + 'мс');
|
alert( 'Время walkLength: ' + bench(walkLength) + 'мс' );
|
||||||
```
|
```
|
||||||
|
|
||||||
Теперь представим себе, что во время первого бенчмаркинга `bench(walkIn)` компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго -- перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно.
|
Теперь представим себе, что во время первого бенчмаркинга `bench(walkIn)` компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго -- перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно.
|
||||||
|
@ -281,28 +286,34 @@ alert('Время walkLength: ' + bench(walkLength) + 'мс');
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for(var i=0; i<1000; i++) arr[i] = 0;
|
for (var i = 0; i < 1000; i++) arr[i] = 0;
|
||||||
|
|
||||||
function walkIn(arr) { for(var key in arr) arr[i]++; }
|
function walkIn(arr) {
|
||||||
function walkLength(arr) { for(var i=0; i<arr.length; i++) arr[i]++; }
|
for (var key in arr) arr[i]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
function walkLength(arr) {
|
||||||
|
for (var i = 0; i < arr.length; i++) arr[i]++;
|
||||||
|
}
|
||||||
|
|
||||||
function bench(f) {
|
function bench(f) {
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
for (var i=0; i<1000; i++) f(arr);
|
for (var i = 0; i < 1000; i++) f(arr);
|
||||||
return new Date() - date;
|
return new Date() - date;
|
||||||
}
|
}
|
||||||
|
|
||||||
*!*
|
*!*
|
||||||
// bench для каждого теста запустим много раз, чередуя
|
// bench для каждого теста запустим много раз, чередуя
|
||||||
var timeIn = 0, timeLength = 0;
|
var timeIn = 0,
|
||||||
for(var i=0; i<100; i++) {
|
timeLength = 0;
|
||||||
|
for (var i = 0; i < 100; i++) {
|
||||||
timeIn += bench(walkIn);
|
timeIn += bench(walkIn);
|
||||||
timeLength += bench(walkLength);
|
timeLength += bench(walkLength);
|
||||||
}
|
}
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert('Время walkIn: ' + timeIn + 'мс');
|
alert( 'Время walkIn: ' + timeIn + 'мс' );
|
||||||
alert('Время walkLength: ' +timeLength + 'мс');
|
alert( 'Время walkLength: ' + timeLength + 'мс' );
|
||||||
```
|
```
|
||||||
|
|
||||||
[smart header="Более точное время с `performance.now()`"]
|
[smart header="Более точное время с `performance.now()`"]
|
||||||
|
@ -328,13 +339,18 @@ alert('Время walkLength: ' +timeLength + 'мс');
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for(var i=0; i<1000; i++) arr[i] = 0;
|
for (var i = 0; i < 1000; i++) arr[i] = 0;
|
||||||
|
|
||||||
function walkIn(arr) { for(var key in arr) arr[i]++; }
|
function walkIn(arr) {
|
||||||
function walkLength(arr) { for(var i=0; i<arr.length; i++) arr[i]++; }
|
for (var key in arr) arr[i]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
function walkLength(arr) {
|
||||||
|
for (var i = 0; i < arr.length; i++) arr[i]++;
|
||||||
|
}
|
||||||
|
|
||||||
function bench(f) {
|
function bench(f) {
|
||||||
for (var i=0; i<10000; i++) f(arr);
|
for (var i = 0; i < 10000; i++) f(arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.time("All Benchmarks");
|
console.time("All Benchmarks");
|
||||||
|
@ -452,7 +468,7 @@ alert( d.toISOString() ); // вывод, похожий на '2011-01-26T13:51:5
|
||||||
//+ run
|
//+ run
|
||||||
var msUTC = Date.parse('2012-01-26T13:51:50.417Z'); // зона UTC
|
var msUTC = Date.parse('2012-01-26T13:51:50.417Z'); // зона UTC
|
||||||
|
|
||||||
alert(msUTC); // 1327571510417 (число миллисекунд)
|
alert( msUTC ); // 1327571510417 (число миллисекунд)
|
||||||
```
|
```
|
||||||
|
|
||||||
С таймзоной `-07:00 GMT`:
|
С таймзоной `-07:00 GMT`:
|
||||||
|
@ -461,7 +477,7 @@ alert(msUTC); // 1327571510417 (число миллисекунд)
|
||||||
//+ run
|
//+ run
|
||||||
var ms = Date.parse('2012-01-26T13:51:50.417-07:00');
|
var ms = Date.parse('2012-01-26T13:51:50.417-07:00');
|
||||||
|
|
||||||
alert(ms); // 1327611110417 (число миллисекунд)
|
alert( ms ); // 1327611110417 (число миллисекунд)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -474,7 +490,7 @@ alert(ms); // 1327611110417 (число миллисекунд)
|
||||||
//+ run
|
//+ run
|
||||||
var ms = Date.parse("January 26, 2011 13:51:50");
|
var ms = Date.parse("January 26, 2011 13:51:50");
|
||||||
|
|
||||||
alert(ms);
|
alert( ms );
|
||||||
```
|
```
|
||||||
|
|
||||||
Вы также можете почитать о старых форматах IE в документации к методу <a href="http://msdn.microsoft.com/en-us/library/k4w173wk%28v=vs.85%29.aspx">MSDN Date.parse</a>.
|
Вы также можете почитать о старых форматах IE в документации к методу <a href="http://msdn.microsoft.com/en-us/library/k4w173wk%28v=vs.85%29.aspx">MSDN Date.parse</a>.
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert(typeof 123); // "number"
|
alert( typeof 123 ); // "number"
|
||||||
alert(typeof "строка"); // "string"
|
alert( typeof "строка" ); // "string"
|
||||||
alert(typeof new Date()); // "object"
|
alert( typeof new Date() ); // "object"
|
||||||
alert(typeof []); // "object"
|
alert( typeof [] ); // "object"
|
||||||
```
|
```
|
||||||
|
|
||||||
Оператор `typeof` не умеет различать разные типы объектов, они для него все на одно лицо: `"object"`. Поэтому он не сможет отличить `Date` от `Array`.
|
Оператор `typeof` не умеет различать разные типы объектов, они для него все на одно лицо: `"object"`. Поэтому он не сможет отличить `Date` от `Array`.
|
||||||
|
@ -21,12 +21,12 @@ alert(typeof []); // "object"
|
||||||
function formatDate(date) {
|
function formatDate(date) {
|
||||||
if (typeof date == 'number') {
|
if (typeof date == 'number') {
|
||||||
// перевести секунды в миллисекунды и преобразовать к Date
|
// перевести секунды в миллисекунды и преобразовать к Date
|
||||||
date = new Date(date*1000);
|
date = new Date(date * 1000);
|
||||||
} else if(typeof date == 'string') {
|
} else if (typeof date == 'string') {
|
||||||
// разобрать строку и преобразовать к Date
|
// разобрать строку и преобразовать к Date
|
||||||
date = date.split('-');
|
date = date.split('-');
|
||||||
date = new Date(date[0], date[1]-1, date[2]);
|
date = new Date(date[0], date[1] - 1, date[2]);
|
||||||
} else if ( date.length ) { // есть длина, но не строка - значит массив
|
} else if (date.length) { // есть длина, но не строка - значит массив
|
||||||
date = new Date(date[0], date[1], date[2]);
|
date = new Date(date[0], date[1], date[2]);
|
||||||
}
|
}
|
||||||
// преобразования для поддержки полиморфизма завершены,
|
// преобразования для поддержки полиморфизма завершены,
|
||||||
|
@ -35,7 +35,7 @@ function formatDate(date) {
|
||||||
var day = date.getDate();
|
var day = date.getDate();
|
||||||
if (day < 10) day = '0' + day;
|
if (day < 10) day = '0' + day;
|
||||||
|
|
||||||
var month = date.getMonth()+1;
|
var month = date.getMonth() + 1;
|
||||||
if (month < 10) month = '0' + month;
|
if (month < 10) month = '0' + month;
|
||||||
|
|
||||||
// взять 2 последние цифры года
|
// взять 2 последние цифры года
|
||||||
|
@ -47,9 +47,9 @@ function formatDate(date) {
|
||||||
return formattedDate;
|
return formattedDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
alert( formatDate( '2011-10-02' ) ); // 02.10.11
|
alert( formatDate('2011-10-02') ); // 02.10.11
|
||||||
alert( formatDate( 1234567890 ) ); // 14.02.09
|
alert( formatDate(1234567890) ); // 14.02.09
|
||||||
alert( formatDate( [2014,0,1] ) ); // 01.01.14
|
alert( formatDate([2014, 0, 1]) ); // 01.01.14
|
||||||
alert( formatDate( new Date(2014,0,1) ) ); // 01.01.14
|
alert( formatDate(new Date(2014, 0, 1)) ); // 01.01.14
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
```js
|
```js
|
||||||
function formatDate(date) { /* ваш код */ }
|
function formatDate(date) { /* ваш код */ }
|
||||||
|
|
||||||
alert( formatDate( '2011-10-02' ) ); // 02.10.11
|
alert( formatDate('2011-10-02') ); // 02.10.11
|
||||||
alert( formatDate( 1234567890 ) ); // 14.02.09
|
alert( formatDate(1234567890) ); // 14.02.09
|
||||||
alert( formatDate( [2014,0,1] ) ); // 01.01.14
|
alert( formatDate([2014, 0, 1]) ); // 01.01.14
|
||||||
alert( formatDate( new Date(2014,0,1) ) ); // 01.01.14
|
alert( formatDate(new Date(2014, 0, 1)) ); // 01.01.14
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ alert( typeof new Date ); // 'object'
|
||||||
var something = [1, 2, 3];
|
var something = [1, 2, 3];
|
||||||
|
|
||||||
if (something.splice) {
|
if (something.splice) {
|
||||||
alert('Это утка! То есть, массив!');
|
alert( 'Это утка! То есть, массив!' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ if (something.splice) {
|
||||||
var x = new Date();
|
var x = new Date();
|
||||||
|
|
||||||
if (x.getTime) {
|
if (x.getTime) {
|
||||||
alert('Дата!');
|
alert( 'Дата!' );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ function sayHi(who) {
|
||||||
if (who.forEach) { // проверка на массив (или что-то похожее)
|
if (who.forEach) { // проверка на массив (или что-то похожее)
|
||||||
who.forEach(sayHi);
|
who.forEach(sayHi);
|
||||||
} else {
|
} else {
|
||||||
alert('Привет, ' + who);
|
alert( 'Привет, ' + who );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,10 +138,10 @@ function sayHi(who) {
|
||||||
sayHi("Вася"); // Привет, Вася
|
sayHi("Вася"); // Привет, Вася
|
||||||
|
|
||||||
// Вызов с массивом
|
// Вызов с массивом
|
||||||
sayHi( ["Саша", "Петя"] ); // Привет, Саша... Петя
|
sayHi(["Саша", "Петя"]); // Привет, Саша... Петя
|
||||||
|
|
||||||
// Вызов с вложенными массивами
|
// Вызов с вложенными массивами
|
||||||
sayHi( ["Саша", "Петя", ["Маша", "Юля"] ] ); // Привет Саша..Петя..Маша..Юля
|
sayHi(["Саша", "Петя", ["Маша", "Юля"]]); // Привет Саша..Петя..Маша..Юля
|
||||||
```
|
```
|
||||||
|
|
||||||
Здесь вместо `splice` проверяется наличие `forEach`. Так надёжнее, поскольку именно его мы собираемся использовать.
|
Здесь вместо `splice` проверяется наличие `forEach`. Так надёжнее, поскольку именно его мы собираемся использовать.
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<li>При операциях, когда необходимо получить окончательный результат -- округлять до 2го знака после запятой. Все, что дальше -- ошибка округления:
|
<li>При операциях, когда необходимо получить окончательный результат -- округлять до 2го знака после запятой. Все, что дальше -- ошибка округления:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run no-beautify
|
||||||
var price1 = 0.1, price2 = 0.2;
|
var price1 = 0.1, price2 = 0.2;
|
||||||
alert( +(price1 + price2).toFixed(2) );
|
alert( +(price1 + price2).toFixed(2) );
|
||||||
```
|
```
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while(i < 11) {
|
while (i < 11) {
|
||||||
i += 0.2;
|
i += 0.2;
|
||||||
if (i>9.8 && i<10.2) alert(i);
|
if (i > 9.8 && i < 10.2) alert( i );
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while(i != 10) {
|
while (i != 10) {
|
||||||
i += 0.2;
|
i += 0.2;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -72,7 +72,7 @@ function getDecimal(num) {
|
||||||
var str = "" + num;
|
var str = "" + num;
|
||||||
var zeroPos = str.indexOf(".");
|
var zeroPos = str.indexOf(".");
|
||||||
if (zeroPos == -1) return 0;
|
if (zeroPos == -1) return 0;
|
||||||
str = str.slice( zeroPos );
|
str = str.slice(zeroPos);
|
||||||
return +str;
|
return +str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,15 @@
|
||||||
function fibBinet(n) {
|
function fibBinet(n) {
|
||||||
var phi = (1 + Math.sqrt(5)) / 2;
|
var phi = (1 + Math.sqrt(5)) / 2;
|
||||||
// используем Math.round для округления до ближайшего целого
|
// используем Math.round для округления до ближайшего целого
|
||||||
return Math.round( Math.pow(phi, n) / Math.sqrt(5) );
|
return Math.round(Math.pow(phi, n) / Math.sqrt(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
function fib(n){
|
function fib(n) {
|
||||||
var a=1, b=0, x;
|
var a = 1,
|
||||||
for(i=0; i<n; i++) {
|
b = 0,
|
||||||
x = a+b;
|
x;
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
x = a + b;
|
||||||
a = b
|
a = b
|
||||||
b = x;
|
b = x;
|
||||||
}
|
}
|
||||||
|
@ -21,7 +23,7 @@ function fib(n){
|
||||||
alert( fibBinet(2) ); // 1, равно fib(2)
|
alert( fibBinet(2) ); // 1, равно fib(2)
|
||||||
alert( fibBinet(8) ); // 21, равно fib(8)
|
alert( fibBinet(8) ); // 21, равно fib(8)
|
||||||
*!*
|
*!*
|
||||||
alert( fibBinet(77)); // 5527939700884755
|
alert( fibBinet(77) ); // 5527939700884755
|
||||||
alert( fib(77) ); // 5527939700884757, не совпадает!
|
alert( fib(77) ); // 5527939700884757, не совпадает!
|
||||||
*/!*
|
*/!*
|
||||||
```
|
```
|
||||||
|
|
|
@ -9,10 +9,12 @@
|
||||||
Код для их вычисления (из задачи [](/task/fibonacci-numbers)):
|
Код для их вычисления (из задачи [](/task/fibonacci-numbers)):
|
||||||
|
|
||||||
```js
|
```js
|
||||||
function fib(n){
|
function fib(n) {
|
||||||
var a=1, b=0, x;
|
var a = 1,
|
||||||
for(i=0; i<n; i++) {
|
b = 0,
|
||||||
x = a+b;
|
x;
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
x = a + b;
|
||||||
a = b
|
a = b
|
||||||
b = x;
|
b = x;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
//+ run
|
//+ run
|
||||||
var max = 10;
|
var max = 10;
|
||||||
|
|
||||||
alert( Math.random()*max );
|
alert( Math.random() * max );
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,9 @@
|
||||||
|
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
var min=5, max = 10;
|
var min = 5,
|
||||||
|
max = 10;
|
||||||
|
|
||||||
alert( min + Math.random()*(max-min) );
|
alert( min + Math.random() * (max - min) );
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
function randomInteger(min, max) {
|
function randomInteger(min, max) {
|
||||||
var rand = min + Math.random()*(max-min)
|
var rand = min + Math.random() * (max - min)
|
||||||
rand = Math.round(rand);
|
rand = Math.round(rand);
|
||||||
return rand;
|
return rand;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ alert( randomInteger(1, 3) );
|
||||||
Это происходит из-за того, что `Math.round()` получает разнообразные случайные числа из интервала от `1` до `3`, но при округлении до ближайшего целого получится, что:
|
Это происходит из-за того, что `Math.round()` получает разнообразные случайные числа из интервала от `1` до `3`, но при округлении до ближайшего целого получится, что:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
значения из диапазона 1 ... 1.49999.. станут 1
|
значения из диапазона 1 ... 1.49999.. станут 1
|
||||||
значения из диапазона 1.5 ... 2.49999.. станут 2
|
значения из диапазона 1.5 ... 2.49999.. станут 2
|
||||||
значения из диапазона 2.5 ... 2.99999.. станут 3
|
значения из диапазона 2.5 ... 2.99999.. станут 3
|
||||||
|
@ -35,10 +36,10 @@ alert( randomInteger(1, 3) );
|
||||||
//+ run
|
//+ run
|
||||||
*!*
|
*!*
|
||||||
function randomInteger(min, max) {
|
function randomInteger(min, max) {
|
||||||
var rand = min - 0.5 + Math.random()*(max-min+1)
|
var rand = min - 0.5 + Math.random() * (max - min + 1)
|
||||||
rand = Math.round(rand);
|
rand = Math.round(rand);
|
||||||
return rand;
|
return rand;
|
||||||
}
|
}
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert( randomInteger(5, 10) );
|
alert( randomInteger(5, 10) );
|
||||||
|
@ -55,6 +56,7 @@ alert( randomInteger(5, 10) );
|
||||||
Тогда `Math.floor()` округлит их так:
|
Тогда `Math.floor()` округлит их так:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ no-beautify
|
||||||
1 ... 1.999+ станет 1
|
1 ... 1.999+ станет 1
|
||||||
2 ... 2.999+ станет 2
|
2 ... 2.999+ станет 2
|
||||||
3 ... 3.999+ станет 3
|
3 ... 3.999+ станет 3
|
||||||
|
@ -67,10 +69,10 @@ alert( randomInteger(5, 10) );
|
||||||
//+ run
|
//+ run
|
||||||
*!*
|
*!*
|
||||||
function randomInteger(min, max) {
|
function randomInteger(min, max) {
|
||||||
var rand = min + Math.random() * (max+1-min);
|
var rand = min + Math.random() * (max + 1 - min);
|
||||||
rand = Math.floor(rand);
|
rand = Math.floor(rand);
|
||||||
return rand;
|
return rand;
|
||||||
}
|
}
|
||||||
*/!*
|
*/!*
|
||||||
|
|
||||||
alert( randomInteger(5, 10) );
|
alert( randomInteger(5, 10) );
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue