diff --git a/1-js/2-first-steps/13-logical-ops/article.md b/1-js/2-first-steps/13-logical-ops/article.md index a132b6fb..4942472f 100644 --- a/1-js/2-first-steps/13-logical-ops/article.md +++ b/1-js/2-first-steps/13-logical-ops/article.md @@ -13,7 +13,7 @@ result = a || b; ``` -**Логическое ИЛИ в классическом программировании работает следующим образом: "если *хотя бы один* из аргументов `true`, то возвращает `true`, иначе -- `false`".** +Логическое ИЛИ в классическом программировании работает следующим образом: "если *хотя бы один* из аргументов `true`, то возвращает `true`, иначе -- `false`". В JavaScript, как мы увидим далее, это не совсем так, но для начала рассмотрим только логические значения. Получается следующая "таблица результатов": @@ -25,7 +25,7 @@ alert( true || false); // true alert( false || false); // false ``` -Если значение не логического типа -- то оно к нему приводится. Например, число `1` будет воспринято как `true`, а `0` -- как `false`: +Если значение не логического типа -- то оно к нему приводится в целях вычислений. Например, число `1` будет воспринято как `true`, а `0` -- как `false`: ```js //+ run @@ -129,6 +129,9 @@ alert(result); // выведет "Привет!" - первое значение alert(undefined || '' || false || 0); // 0 ``` +[summary] +Итак, оператор `||` вычисляет операнды слева направо до первого "истинного" и возвращает его, а если все ложные -- то последнее значение. +[/summary] ## && (И) @@ -171,7 +174,7 @@ if ( 1 && 0 ) { // вычислится как true && false К И применим тот же принцип "короткого цикла вычислений", но немного по-другому, чем к ИЛИ. -**Если левый аргумент -- `false`, оператор И возвращает его и заканчивает вычисления. Иначе -- вычисляет и возвращает правый аргумент.** +Если левый аргумент -- `false`, оператор И возвращает его и заканчивает вычисления. Иначе -- вычисляет и возвращает правый аргумент. Например: @@ -197,7 +200,12 @@ alert(1 && 2 && null && 3); // null alert(1 && 2 && 3); // 3 ``` -**Приоритет оператора И `&&` больше, чем ИЛИ `||`, т.е. он выполняется раньше.** +[summary] +Итак, оператор `&&` вычисляет операнды слева направо до первого "ложного" и возвращает его, а если все истинные -- то последнее значение. +[/summary] + +[smart header="Приоритет у `&&` больше, чем у `||`"] +Приоритет оператора И `&&` больше, чем ИЛИ `||`, так что он выполняется раньше. Поэтому в следующем коде сначала будет вычислено правое И: `1 && 0 = 0`, а уже потом -- ИЛИ. @@ -205,7 +213,7 @@ alert(1 && 2 && 3); // 3 //+ run alert(5 || 1 && 0); // 5 ``` - +[/smart] [warn header="Не используйте `&&` вместо `if`"] diff --git a/1-js/2-first-steps/8-operators/article.md b/1-js/2-first-steps/8-operators/article.md index e0f20193..3a8b7b69 100644 --- a/1-js/2-first-steps/8-operators/article.md +++ b/1-js/2-first-steps/8-operators/article.md @@ -135,7 +135,7 @@ alert( +apples + +oranges); // 5, число, оба операнда предв 5деление`/` 6сложение`+` 6вычитание`-` -17присвоение`=` +3присвоение`=` ......... @@ -145,7 +145,7 @@ alert( +apples + +oranges); // 5, число, оба операнда предв Обратим внимание, в таблице приоритетов также есть оператор присваивания `=`. -У него -- один из самых низких приоритетов: `17`. +У него -- один из самых низких приоритетов: `3`. Именно поэтому, когда переменную чему-либо присваивают, например, `x = 2 * 2 + 1` сначала выполнится арифметика, а уже затем -- произойдёт присвоение `=`. diff --git a/1-js/4-data-structures/2-number/article.md b/1-js/4-data-structures/2-number/article.md index 397940ba..b467f990 100644 --- a/1-js/4-data-structures/2-number/article.md +++ b/1-js/4-data-structures/2-number/article.md @@ -161,7 +161,7 @@ alert(number); // Infinity, плюс преобразовал строку "Infi Обычно если мы хотим от посетителя получить число, то `Infinity` или `NaN` нам не подходят. Для того, чтобы отличить "обычные" числа от таких специальных значений, существует функция `isFinite`. -**Функция `isFinite(n)` возвращает `true` только тогда, когда `n` -- обычное число, а не одно из этих значений:** +**Функция `isFinite(n)` преобразует аргумент к числу и возвращает `true`, если это не `NaN/Infinity/-Infinity`:** ```js //+ run diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/article.md b/1-js/7-js-misc/3-setTimeout-setInterval/article.md index 5ac95ffe..e649ed48 100644 --- a/1-js/7-js-misc/3-setTimeout-setInterval/article.md +++ b/1-js/7-js-misc/3-setTimeout-setInterval/article.md @@ -245,6 +245,14 @@ setTimeout(function() {}, 100); В Internet Explorer, нулевая задержка `setInterval(.., 0)` не сработает. Это касается именно `setInterval`, т.е. `setTimeout(.., 0)` работает нормально. [/warn] +[smart header="Откуда взялись эти 4мс?"] +Почему минимальная задержка -- 4мс, а не 1мс? Зачем она вообще существует? + +Это -- "привет" от прошлого. Браузер Chrome как-то пытался убрать минимальную задержку в своих ранних версиях, но оказалось, что существуют сайты, которые используют `setTimeout(..,0)` рекурсивно, создавая тем самым "асинхронный цикл". И, если задержку совсем убрать, то будет 100% загрузка процессора, такой сайт "подвесит" браузер. + +Поэтому, чтобы не ломать существующие скрипты, решили сделать задержку. По возможности, небольшую. На время создания стандарта оптимальным числом показались 4мс. +[/smart] + ## Реальная частота срабатывания В ряде ситуаций таймер будет срабатывать реже, чем обычно. Задержка между вызовами `setInterval(..., 4)` может быть не 4мс, а 30мс или даже 1000мс. diff --git a/8-extra/10-cookie/article.md b/12-extra/10-cookie/article.md similarity index 100% rename from 8-extra/10-cookie/article.md rename to 12-extra/10-cookie/article.md diff --git a/8-extra/10-cookie/safari-nocookie.png b/12-extra/10-cookie/safari-nocookie.png similarity index 100% rename from 8-extra/10-cookie/safari-nocookie.png rename to 12-extra/10-cookie/safari-nocookie.png diff --git a/8-extra/10-cookie/safari-nocookie@2x.png b/12-extra/10-cookie/safari-nocookie@2x.png similarity index 100% rename from 8-extra/10-cookie/safari-nocookie@2x.png rename to 12-extra/10-cookie/safari-nocookie@2x.png diff --git a/8-extra/11-intl/1-collate-array-sort/solution.md b/12-extra/11-intl/1-collate-array-sort/solution.md similarity index 100% rename from 8-extra/11-intl/1-collate-array-sort/solution.md rename to 12-extra/11-intl/1-collate-array-sort/solution.md diff --git a/8-extra/11-intl/1-collate-array-sort/task.md b/12-extra/11-intl/1-collate-array-sort/task.md similarity index 100% rename from 8-extra/11-intl/1-collate-array-sort/task.md rename to 12-extra/11-intl/1-collate-array-sort/task.md diff --git a/8-extra/11-intl/article.md b/12-extra/11-intl/article.md similarity index 98% rename from 8-extra/11-intl/article.md rename to 12-extra/11-intl/article.md index 3b4cb175..44a9e90e 100644 --- a/8-extra/11-intl/article.md +++ b/12-extra/11-intl/article.md @@ -1,6 +1,6 @@ -# Интернационализация, встроенные объекты Intl +# Intl: интернационализация в JavaScript -Общая проблема строк, дат, чисел в JavaScript -- они совершенно не в курсе языков и стран, где находится посетитель. +Общая проблема строк, дат, чисел в JavaScript -- они "не в курсе" языка и особенностей стран, где находится посетитель. В частности:
@@ -12,7 +12,7 @@
В одних странах выводятся цифрами, в других -- иероглифами, длинные числа разделяются где-то пробелом, где-то запятой.
-Все современные браузеры, кроме IE10- (но есть библиотеки и для него) поддерживает стандарт [ECMA 402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf), предназначенный решить эти проблемы навсегда. +Все современные браузеры, кроме IE10- (но есть библиотеки и для него) поддерживают стандарт [ECMA 402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf), предназначенный решить эти проблемы навсегда. [cut] diff --git a/8-extra/12-regexp-specials/article.md b/12-extra/12-regexp-specials/article.md similarity index 100% rename from 8-extra/12-regexp-specials/article.md rename to 12-extra/12-regexp-specials/article.md diff --git a/8-extra/3-templates/article.md b/12-extra/3-templates/article.md similarity index 100% rename from 8-extra/3-templates/article.md rename to 12-extra/3-templates/article.md diff --git a/8-extra/4-books/article.md b/12-extra/4-books/article.md similarity index 71% rename from 8-extra/4-books/article.md rename to 12-extra/4-books/article.md index 00e3c1fb..f687e3f1 100644 --- a/8-extra/4-books/article.md +++ b/12-extra/4-books/article.md @@ -1,15 +1,8 @@ # Книги по JS, HTML/CSS и не только -При разработке сложных приложений вам понадобятся как смежные технологии, так и знание общей методологии программирования. -[cut] - -Прямо сейчас вам будет достаточно знания основ HTML/CSS, но в будущем или параллельно с изучением учебника вы, возможно, захотите углубить свои знания и в других областях. - -**Для обучения JavaScript по учебнику чтение книг, которые здесь предложены, не является обязательным.** - Мне часто задают вопрос: "Какую литературу порекомендуете?". На этой странице я предлагаю рекомендации по различным темам. Всего несколько книг на каждую тему, из большего количества все равно пришлось бы выбирать. -Кстати, по всем книжкам, особенно тех, которые касаются технологий, всегда ищите последнее издание. +Кстати, по всем книжкам, особенно тем, которые касаются технологий, всегда ищите последнее издание. P.S. Скачать книги здесь нельзя. Эта страница содержит только рекомендации. @@ -18,20 +11,20 @@ P.S. Скачать книги здесь нельзя. Эта страница CSS стоит изучать по одной из этих книг. Можно сразу по обеим. -Для того, чтобы разобраться в конкретных вопросах CSS, и в качестве справочника полезна книга Эрика Мейера CSS. Каскадные таблицы стилей. Подробное руководство., а также [стандарт CSS 2.1](http://specs.operafan.net/css2.1RU/CSS21/visuren.html). +Конечно, [стандарт CSS 2.1](http://specs.operafan.net/css2.1RU/CSS21/visuren.html) тоже будет вам в помощь. Подчас его скупая простота и точность гораздо понятнее, чем много страниц разъяснений. ## JavaScript Полезное чтение о языке, встроенных методах и конструкциях JavaScript: