Merge pull request #53 from Romchik/master
Исправление различных мелких ошибок.
This commit is contained in:
commit
8ebc0b769f
21 changed files with 53 additions and 53 deletions
|
@ -30,7 +30,7 @@
|
|||
<ul>
|
||||
<li>При клике на `bug.html` вы перейдёте во вкладку с кодом к месту ошибки, там будет и краткое описание ошибки.
|
||||
В данном случае ошибка вызвана строкой `lalala`, которая интерпретатору непонятна. </li>
|
||||
<li>В этом же окошке же вы можете набирать команды на JavaScript, например наберите `alert("Hello")` -- команду вывода сообщения и запустите её нажатием [key Enter]. Мы познакомимся с этой и другими командами далее.</li>
|
||||
<li>В этом же окошке же вы можете набирать команды на JavaScript. Например, наберите `alert("Hello")` -- команду вывода сообщения и запустите её нажатием [key Enter]. Мы познакомимся с этой и другими командами далее.</li>
|
||||
<li>Для перевода курсора на следующую строку (если команда состоит из нескольких строк) -- используется сочетание [key Shift+Enter].</li>
|
||||
</ul>
|
||||
|
||||
|
@ -49,9 +49,9 @@
|
|||
|
||||
<img src="firebug-gray.png">
|
||||
|
||||
Если иконки не видно -- возможно, у вас выключена панель расширений. Нажмите [key Ctrl+\] для ее показа.
|
||||
Если иконки не видно -- возможно, у вас выключена панель расширений. Нажмите [key Ctrl+\] для её отображения.
|
||||
|
||||
Ну а если ее нет и там, то нажмите [key F12] -- это горячая клавиша для запуска Firebug, расширение появится, если установлено.
|
||||
Ну а если её нет и там, то нажмите [key F12] -- это горячая клавиша для запуска Firebug, расширение появится, если установлено.
|
||||
</li>
|
||||
<li>Далее, для того чтобы консоль заработала, её надо включить.
|
||||
|
||||
|
@ -72,9 +72,9 @@
|
|||
</li>
|
||||
</ol>
|
||||
|
||||
Как и в Chrome, можно набирать и запускать команды, область для команд на рисунке находится справа, запуск команд осуществляется нажатием [key Ctrl+Enter] (для Mac -- [key Cmd]).
|
||||
Как и в Chrome, можно набирать и запускать команды. Область для команд на рисунке находится справа, запуск команд осуществляется нажатием [key Ctrl+Enter] (для Mac -- [key Cmd]).
|
||||
|
||||
Можно перенести её вниз. нажав на кнопочку <img src="firefox_console_down.png"> -- на рисунке она не видна, но есть справа-снизу панели разработки.
|
||||
Можно перенести её вниз, нажав на кнопочку <img src="firefox_console_down.png"> (на рисунке её не видно, но она присутствует в правом нижнем углу панели разработки).
|
||||
|
||||
Об основных возможностях можно прочитать на сайте <a href="http://firebug.ru">firebug.ru</a>.
|
||||
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
|
||||
Сделайте страницу, которая выводит "Я - JavaScript!".
|
||||
|
||||
Создайте ее на диске, откройте в браузере, убедитесь, что все работает.
|
||||
Создайте её на диске, откройте в браузере, убедитесь, что всё работает.
|
||||
|
||||
[demo src="solution"]
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
## Тег SCRIPT
|
||||
|
||||
[smart header="А побыстрее?"]
|
||||
В том (и только в том!) случае, если читатель нетерпелив и уже разрабатывал на JavaScript или имеет достаточно опыта в другом программировании, он может не читать каждую статью этого раздела, а прыгнуть сразу на главу [](/javascript-specials). Там будет кратко самое основное.
|
||||
В том (и только в том!) случае, если читатель нетерпелив и уже разрабатывал на JavaScript или имеет достаточно опыта в другом языке программировании, он может не читать каждую статью этого раздела, а перепрыгнуть сразу к главе [](/javascript-specials). Там будет кратко самое основное.
|
||||
|
||||
Если же у вас есть достаточно времени и желание начать с азов, то читайте дальше :)
|
||||
[/smart]
|
||||
|
|
|
@ -11,14 +11,14 @@
|
|||
alert(сообщение)
|
||||
```
|
||||
|
||||
`alert` выводит на экран окно с сообщением и приостанавливает выполнение скрипта, пока пользователь не нажмет "ОК".
|
||||
`alert` выводит на экран окно с сообщением и приостанавливает выполнение скрипта, пока пользователь не нажмёт "ОК".
|
||||
|
||||
```js
|
||||
//+ run
|
||||
alert( "Привет" );
|
||||
```
|
||||
|
||||
Окно сообщения, которое выводится, является *модальным окном*. Слово "модальное" означает, что посетитель не может взаимодействовать со страницей, нажимать другие кнопки и т.п., пока не разберется с окном. В данном случае - пока не нажмет на "OK".
|
||||
Окно сообщения, которое выводится, является *модальным окном*. Слово "модальное" означает, что посетитель не может взаимодействовать со страницей, нажимать другие кнопки и т.п., пока не разберётся с окном. В данном случае - пока не нажмёт на "OK".
|
||||
|
||||
## prompt
|
||||
|
||||
|
@ -33,7 +33,7 @@ result = prompt(title, default);
|
|||
|
||||
Пользователь должен либо что-то ввести и нажать OK, либо отменить ввод кликом на CANCEL или нажатием [key Esc] на клавиатуре.
|
||||
|
||||
**Вызов `prompt` возвращает то, что ввел посетитель -- строку или специальное значение `null`, если ввод отменен.**
|
||||
**Вызов `prompt` возвращает то, что ввёл посетитель -- строку или специальное значение `null`, если ввод отменён.**
|
||||
|
||||
[warn header="Safari 5.1+ не возвращает `null`"]
|
||||
Единственный браузер, который не возвращает `null` при отмене ввода -- это Safari. При отсутствии ввода он возвращает пустую строку. Предположительно, это ошибка в браузере.
|
||||
|
@ -53,7 +53,7 @@ alert('Вам ' + years + ' лет!')
|
|||
[warn header="Всегда указывайте `default`"]
|
||||
Второй параметр может отсутствовать. Однако при этом IE вставит в диалог значение по умолчанию `"undefined"`.
|
||||
|
||||
Запустите этот код <u>в IE</u>, чтобы понять о чем речь:
|
||||
Запустите этот код <u>в IE</u>, чтобы понять о чём речь:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
|
@ -106,6 +106,6 @@ alert( isAdmin );
|
|||
|
||||
<ul>
|
||||
<li>`alert` выводит сообщение.</li>
|
||||
<li>`prompt` выводит сообщение и ждет, пока пользователь введет текст, а затем возвращает введенное значение или `null`, если ввод отменен (CANCEL/[key Esc]).</li>
|
||||
<li>`confirm` выводит сообщение и ждет, пока пользователь нажмет "OK" или "CANCEL" и возвращает `true/false`.</li>
|
||||
</ul>
|
||||
<li>`prompt` выводит сообщение и ждёт, пока пользователь введёт текст, а затем возвращает введённое значение или `null`, если ввод отменён (CANCEL/[key Esc]).</li>
|
||||
<li>`confirm` выводит сообщение и ждёт, пока пользователь нажмёт "OK" или "CANCEL" и возвращает `true/false`.</li>
|
||||
</ul>
|
||||
|
|
|
@ -272,7 +272,7 @@ alert( !true ); // false
|
|||
alert( !0 ); // true
|
||||
```
|
||||
|
||||
**В частности, двойное НЕ используются для преобразования значений к логическому типу:**
|
||||
**В частности, двойное НЕ используют для преобразования значений к логическому типу:**
|
||||
|
||||
```js
|
||||
//+ run
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
[importance 5]
|
||||
|
||||
Напишите цикл, который предлагает `prompt` ввести число, большее `100`. Если посетитель ввел другое число -- попросить ввести еще раз, и так далее.
|
||||
Напишите цикл, который предлагает `prompt` ввести число, большее `100`. Если посетитель ввёл другое число -- попросить ввести ещё раз, и так далее.
|
||||
|
||||
Цикл должен спрашивать число пока либо посетитель не введет число, большее `100`, либо не нажмет кнопку Cancel (ESC).
|
||||
Цикл должен спрашивать число пока либо посетитель не введёт число, большее `100`, либо не нажмёт кнопку Cancel (ESC).
|
||||
|
||||
Предполагается, что посетитель вводит только числа, предусматривать обработку нечисловых строк в этой задаче необязательно.
|
||||
Предполагается, что посетитель вводит только числа. Предусматривать обработку нечисловых строк в этой задаче необязательно.
|
||||
|
||||
[demo /]
|
||||
|
|
|
@ -119,7 +119,7 @@ for (i = 0; i < 3; i++) {
|
|||
<li>Идти на шаг 2.</li>
|
||||
</ol>
|
||||
|
||||
Иными, словами, поток выполнения: `начало` -> (если `условие` -> `тело` -> `шаг`) -> (если `условие` -> `тело` -> `шаг`) -> ... и так далее, пока верно `условие`.
|
||||
Иными словами, поток выполнения: `начало` -> (если `условие` -> `тело` -> `шаг`) -> (если `условие` -> `тело` -> `шаг`) -> ... и так далее, пока верно `условие`.
|
||||
|
||||
[smart]
|
||||
В цикле также можно определить переменную:
|
||||
|
@ -161,7 +161,7 @@ for (; i < 3;) {
|
|||
}
|
||||
```
|
||||
|
||||
А можно и вообще убрать все, получив бесконечный цикл:
|
||||
А можно и вообще убрать всё, получив бесконечный цикл:
|
||||
|
||||
```js
|
||||
for (;;) {
|
||||
|
@ -213,7 +213,7 @@ alert( 'Сумма: ' + sum );
|
|||
|
||||
Её используют, если понятно, что на текущем повторе цикла делать больше нечего.
|
||||
|
||||
Например, цикл ниже использует `continue`, чтобы не выводить четные значения:
|
||||
Например, цикл ниже использует `continue`, чтобы не выводить чётные значения:
|
||||
|
||||
```js
|
||||
//+ run no-beautify
|
||||
|
@ -225,7 +225,7 @@ for (var i = 0; i < 10; i++) {
|
|||
}
|
||||
```
|
||||
|
||||
Для четных `i` срабатывает `continue`, выполнение тела прекращается и управление передается на следующий проход `for`.
|
||||
Для чётных `i` срабатывает `continue`, выполнение тела прекращается и управление передаётся на следующий проход `for`.
|
||||
|
||||
[smart header="Директива `continue` позволяет обойтись без скобок"]
|
||||
|
||||
|
@ -313,7 +313,7 @@ alert('Готово!');
|
|||
outer: for (var i = 0; i < 3; i++) { ... }
|
||||
```
|
||||
|
||||
Можно также выносить ее на отдельную строку:
|
||||
Можно также выносить её на отдельную строку:
|
||||
|
||||
```js
|
||||
//+ no-beautify
|
||||
|
@ -342,7 +342,7 @@ JavaScript поддерживает три вида циклов:
|
|||
|
||||
Обе этих директивы поддерживают "метки", которые ставятся перед циклом. Метки -- единственный способ для `break/continue` повлиять на выполнение внешнего цикла.
|
||||
|
||||
Заметим, что метки не позволяют прыгнуть на произвольное место кода, в JavaScript нет такой возможности.
|
||||
Заметим, что метки не позволяют прыгнуть в произвольное место кода, в JavaScript нет такой возможности.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
[importance 4]
|
||||
|
||||
Следующая функция возвращает `true`, если параметр `age` больше `18`.
|
||||
В ином случае она задает вопрос посредством вызова `confirm` и возвращает его результат.
|
||||
В ином случае она задаёт вопрос посредством вызова `confirm` и возвращает его результат.
|
||||
|
||||
```js
|
||||
function checkAge(age) {
|
||||
|
@ -32,4 +32,4 @@ function checkAge(age) {
|
|||
}
|
||||
```
|
||||
|
||||
Есть ли хоть одно отличие в поведении этого варианта?
|
||||
Есть ли хоть одно отличие в поведении этого варианта?
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
[importance 4]
|
||||
|
||||
Следующая функция возвращает `true`, если параметр `age` больше `18`.
|
||||
В ином случае она задает вопрос `confirm` и возвращает его результат.
|
||||
В ином случае она задаёт вопрос `confirm` и возвращает его результат.
|
||||
|
||||
```js
|
||||
function checkAge(age) {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Зачастую нам надо повторять одно и то же действие во многих частях программы.
|
||||
|
||||
Например, красиво вывести сообщение необходимо при приветствии посетителя, при выходе посетителя с сайта, еще где-нибудь.
|
||||
Например, красиво вывести сообщение необходимо при приветствии посетителя, при выходе посетителя с сайта, ещё где-нибудь.
|
||||
|
||||
Чтобы не повторять один и тот же код во многих местах, придуманы функции. Функции являются основными "строительными блоками" программы.
|
||||
[cut]
|
||||
|
@ -285,7 +285,7 @@ alert(test); // 20
|
|||
|
||||
**Для возврата значения используется директива `return`.**
|
||||
|
||||
Она может находиться в любом месте функции. Как только до нее доходит управление -- функция завершается и значение передается обратно.
|
||||
Она может находиться в любом месте функции. Как только до неё доходит управление -- функция завершается и значение передается обратно.
|
||||
|
||||
Вызовов `return` может быть и несколько, например:
|
||||
|
||||
|
|
|
@ -22,4 +22,4 @@ function factorial(n) {
|
|||
alert( factorial(5) ); // 120
|
||||
```
|
||||
|
||||
В этом случае вызов `factorial(1)` сведется к `1*factorial(0)`, будет дополнительный шаг рекурсии.
|
||||
В этом случае вызов `factorial(1)` сведётся к `1*factorial(0)`, будет дополнительный шаг рекурсии.
|
||||
|
|
|
@ -26,4 +26,4 @@ n! = n * (n - 1) * (n - 2) * ...*1
|
|||
alert( factorial(5) ); // 120
|
||||
```
|
||||
|
||||
Подсказка: обратите внимание, что `n!` можно записать как `n * (n-1)!`, например `3! = 3*2! = 3*2*1! = 6`
|
||||
Подсказка: обратите внимание, что `n!` можно записать как `n * (n-1)!`. Например: `3! = 3*2! = 3*2*1! = 6`
|
||||
|
|
|
@ -15,7 +15,7 @@ alert( fib(7) ); // 13
|
|||
|
||||
При больших значениях `n` оно будет работать очень медленно. Например, `fib(77)` уже будет вычисляться очень долго.
|
||||
|
||||
Это потому, что функция порождает обширное дерево вложенных вызовов. При этом ряд значений вычисляются много раз. Например, посмотрим на отрывок вычислений:
|
||||
Это потому, что функция порождает обширное дерево вложенных вызовов. При этом ряд значений вычисляется много раз. Например, посмотрим на отрывок вычислений:
|
||||
|
||||
```js
|
||||
//+ no-beautify
|
||||
|
@ -53,20 +53,20 @@ a b c
|
|||
a = b, b = c;
|
||||
c = a + b;
|
||||
|
||||
/* стало так (еще число):
|
||||
/* стало так (ещё число):
|
||||
a b c
|
||||
1, 1, 2, 3
|
||||
*/
|
||||
```
|
||||
|
||||
Следующий шаг даст нам еще одно число последовательности:
|
||||
Следующий шаг даст нам ещё одно число последовательности:
|
||||
|
||||
```js
|
||||
//+ no-beautify
|
||||
a = b, b = c;
|
||||
c = a + b;
|
||||
|
||||
/* стало так (еще число):
|
||||
/* стало так (ещё число):
|
||||
a b c
|
||||
1, 1, 2, 3, 5
|
||||
*/
|
||||
|
@ -96,4 +96,4 @@ alert( fib(7) ); // 13
|
|||
alert( fib(77) ); // 5527939700884757
|
||||
```
|
||||
|
||||
Цикл здесь начинается с `i=3`, так как первое и второе числа Фибоначчи заранее записаны в переменные `a=1`, `b=1`.
|
||||
Цикл здесь начинается с `i=3`, так как первое и второе числа Фибоначчи заранее записаны в переменные `a=1`, `b=1`.
|
||||
|
|
|
@ -63,7 +63,7 @@ alert( pow(2, 3) ); // 8
|
|||
|
||||
Максимальная глубина рекурсии в браузерах ограничена, точно можно рассчитывать на `10000` вложенных вызовов, но некоторые интерпретаторы допускают и больше.
|
||||
|
||||
Итак, рекурсию используют, когда вычисление функции можно свести к её более простому вызову, а его -- еще к более простому, и так далее, пока значение не станет очевидно.
|
||||
Итак, рекурсию используют, когда вычисление функции можно свести к её более простому вызову, а его -- ещё к более простому, и так далее, пока значение не станет очевидно.
|
||||
|
||||
## Контекст выполнения, стек
|
||||
|
||||
|
@ -240,4 +240,4 @@ function pow(x, n) {
|
|||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
[/head]
|
||||
[/head]
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js"></script>
|
||||
```
|
||||
|
||||
Вы также можете использовать путь относительно текущей страницы, например `src="lodash.js"` обозначает файл из текущей директории.
|
||||
Вы также можете использовать путь относительно текущей страницы. Например, `src="lodash.js"` обозначает файл из текущей директории.
|
||||
|
||||
Чтобы подключить несколько скриптов, используйте несколько тегов:
|
||||
|
||||
|
@ -136,7 +136,7 @@
|
|||
|
||||
Можно поставить все подобные скрипты в конец страницы -- это уменьшит проблему, но не избавит от неё полностью, если скриптов несколько. Допустим, в конце страницы 3 скрипта, и первый из них тормозит -- получается, другие два его будут ждать -- тоже нехорошо.
|
||||
|
||||
Кроме того, браузер дойдёт до скриптов, расположенных в конце страницы, начнут грузиться только тогда, когда вся страница загрузится. А это не всегда правильно, например счётчик посещений наиболее точно сработает, если загрузить его пораньше.
|
||||
Кроме того, браузер дойдёт до скриптов, расположенных в конце страницы, они начнут грузиться только тогда, когда вся страница загрузится. А это не всегда правильно. Например, счётчик посещений наиболее точно сработает, если загрузить его пораньше.
|
||||
|
||||
Поэтому "расположить скрипты внизу" -- не лучший выход.
|
||||
|
||||
|
@ -205,7 +205,7 @@
|
|||
При запуске вы увидите, что вся страница отобразилась тут же, а `alert` из внешнего скрипта появится позже, когда загрузится скрипт.
|
||||
|
||||
[smart header="Эти атрибуты давно \"в ходу\""]
|
||||
Большинство современных системы рекламы и счётчиков знают про эти атрибуты и используют их.
|
||||
Большинство современных систем рекламы и счётчиков знают про эти атрибуты и используют их.
|
||||
|
||||
Перед вставкой внешнего тега `<script>` понимающий программист всегда проверит, есть ли у него подобный атрибут. Иначе медленный скрипт может задержать загрузку страницы.
|
||||
[/smart]
|
||||
|
@ -246,6 +246,6 @@ addScript('3.js'); // но, гарантированно, в порядке 1 ->
|
|||
|
||||
Очень важно не только читать учебник, но делать что-то самостоятельно.
|
||||
|
||||
Решите задачки, чтобы удостовериться, что вы все правильно поняли.
|
||||
Решите задачки, чтобы удостовериться, что вы всё правильно поняли.
|
||||
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ alert( g(5) ); // 120, работает!
|
|||
|
||||
Как мы говорили выше, в браузере IE до 9 версии имя NFE видно везде, что является ошибкой с точки зрения стандарта.
|
||||
|
||||
...Но на самом деле ситуация еще забавнее. Старый IE создаёт в таких случаях целых две функции: одна записывается в переменную `f`, а вторая -- в переменную `factorial`.
|
||||
...Но на самом деле ситуация ещё забавнее. Старый IE создаёт в таких случаях целых две функции: одна записывается в переменную `f`, а вторая -- в переменную `factorial`.
|
||||
|
||||
Например:
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
Она будет особенно полезна, если ранее вы программировали на другом языке, ну или как повторение важных моментов раздела.
|
||||
|
||||
Все очень компактно, со ссылками на развёрнутые описания.
|
||||
Всё очень компактно, со ссылками на развёрнутые описания.
|
||||
|
||||
[cut]
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ alert( "Сейчас будет ошибка" );
|
|||
|
||||
Со временем программа становится большой и сложной. Появляется необходимость добавить *комментарии*, которые объясняют, что происходит и почему.
|
||||
|
||||
Комментарии могут находиться в любом месте программы и никак не влияют на ее выполнение. Интерпретатор JavaScript попросту игнорирует их.
|
||||
Комментарии могут находиться в любом месте программы и никак не влияют на её выполнение. Интерпретатор JavaScript попросту игнорирует их.
|
||||
|
||||
*Однострочные комментарии* начинаются с двойного слэша `//`. Текст считается комментарием до конца строки:
|
||||
|
||||
|
@ -112,7 +112,7 @@ alert( 'Привет' );
|
|||
alert( 'Мир' );
|
||||
```
|
||||
|
||||
Все содержимое комментария игнорируется. Если поместить код внутрь <code>/* ... */</code> или после `//` -- он не выполнится.
|
||||
Всё содержимое комментария игнорируется. Если поместить код внутрь <code>/* ... */</code> или после `//` -- он не выполнится.
|
||||
|
||||
```js
|
||||
//+ run
|
||||
|
|
|
@ -48,7 +48,7 @@ var user = 'John', age = 25, message = 'Hello';
|
|||
|
||||
### Аналогия из жизни
|
||||
|
||||
Проще всего понять переменную, если представить ее как "коробку" для данных, с уникальным именем.
|
||||
Проще всего понять переменную, если представить её как "коробку" для данных, с уникальным именем.
|
||||
|
||||
Например, переменная `message` -- это коробка, в которой хранится значение `"Hello!"`:
|
||||
|
||||
|
@ -131,7 +131,7 @@ var my-name; // дефис '-' не является разрешенным си
|
|||
```
|
||||
|
||||
[smart header="Регистр букв имеет значение"]
|
||||
Переменные `apple` и `AppLE` - две разные переменные.
|
||||
Переменные `apple` и `AppLE` -- две разные переменные.
|
||||
[/smart]
|
||||
|
||||
[smart header="Русские буквы допустимы, но не рекомендуются"]
|
||||
|
@ -213,7 +213,7 @@ num = 5; // ошибки не будет, так как строгий режи
|
|||
|
||||
Это потому, что переменная `test` не объявлена через `var` и совпадает с `id` элемента `<div>`. Даже не спрашивайте почему -- это ошибка в браузере IE до версии 9.
|
||||
|
||||
Самое "забавное" -- то, что такая ошибка присвоения значений будет только в IE8- и только если на странице присутствует элемент с совпадающим с именем `id`.
|
||||
Самое "забавное" то, что такая ошибка присвоения значений будет только в IE8- и только если на странице присутствует элемент с совпадающим с именем `id`.
|
||||
|
||||
Такие ошибки особенно "весело" исправлять и отлаживать.
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ var age = null;
|
|||
|
||||
Значение `undefined`, как и `null`, образует свой собственный тип, состоящий из одного этого значения. Оно имеет смысл "значение не присвоено".
|
||||
|
||||
Если переменная объявлена, но в неё ничего не записано, то ее значение как раз и есть `undefined`:
|
||||
Если переменная объявлена, но в неё ничего не записано, то её значение как раз и есть `undefined`:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
|
@ -165,4 +165,4 @@ typeof function(){} // "function" (2)
|
|||
|
||||
Очень скоро мы изучим их во всех деталях.
|
||||
|
||||
Оператор `typeof x` позволяет выяснить, какой тип находится в `x`, возвращая его в виде строки.
|
||||
Оператор `typeof x` позволяет выяснить, какой тип находится в `x`, возвращая его в виде строки.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
Несколько операторов мы знаем со школы -- это обычные сложение `+`, умножение `*`, вычитание и так далее.
|
||||
|
||||
В этой главе мы сконцентрируемся на операторах, которые в курсе математике не проходят, и на их особенностях в JavaScript.
|
||||
В этой главе мы сконцентрируемся на операторах, которые в курсе математики не проходят, и на их особенностях в JavaScript.
|
||||
[cut]
|
||||
|
||||
## Термины: "унарный", "бинарный", "операнд"
|
||||
|
@ -425,4 +425,4 @@ for (*!*a = 1, b = 3, c = a*b*/!*; a < 10; a++) {
|
|||
}
|
||||
```
|
||||
|
||||
Такие трюки используются во многих JavaScript-фреймворках для укорачивания кода.
|
||||
Такие трюки используются во многих JavaScript-фреймворках для укорачивания кода.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue