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 4942472f..0f7fa965 100644
--- a/1-js/2-first-steps/13-logical-ops/article.md
+++ b/1-js/2-first-steps/13-logical-ops/article.md
@@ -72,7 +72,7 @@ JavaScript вычисляет несколько ИЛИ слева направ
//+ run
var x;
-*!*true*/!* || (x = 1); // просто вычислим ИЛИ, без if
+*!*true*/!* || (x = 1);
alert(x); // undefined, x не присвоен
```
diff --git a/1-js/2-first-steps/14-types-conversion/article.md b/1-js/2-first-steps/14-types-conversion/article.md
index f22b20e1..6cf8a89a 100644
--- a/1-js/2-first-steps/14-types-conversion/article.md
+++ b/1-js/2-first-steps/14-types-conversion/article.md
@@ -85,7 +85,7 @@ alert( +false); // 0
alert( "\n0 " == 0 ); // true
```
-При этом строка `"\n"` преобразуется к числу, как указано выше: начальные и конечные пробелы обрезаются, получается строка `"0"`, которая равна `0`.
+При этом строка `"\n"` преобразуется к числу, как указано выше: начальные и конечные пробелы обрезаются, получается пустая строка `""`, которая равна `0`.
С логическими значениями:
diff --git a/1-js/2-first-steps/17-function-basics/article.md b/1-js/2-first-steps/17-function-basics/article.md
index 6b85b993..08e2859d 100644
--- a/1-js/2-first-steps/17-function-basics/article.md
+++ b/1-js/2-first-steps/17-function-basics/article.md
@@ -260,7 +260,7 @@ function showMessage(from, text) {
}
```
-Второй способ считает, что аргумент отсутствует, если передана пустая строка, `0`, или вообще любое значение, которое в булевом виде является `false`.
+Второй способ считает, что аргумент отсутствует, если передана пустая строка, `0`, или вообще любое значение, которое в логическом контексте является `false`.
diff --git a/1-js/2-first-steps/21-javascript-specials/article.md b/1-js/2-first-steps/21-javascript-specials/article.md
index 3b875424..8b01bf72 100644
--- a/1-js/2-first-steps/21-javascript-specials/article.md
+++ b/1-js/2-first-steps/21-javascript-specials/article.md
@@ -328,7 +328,7 @@ alert( sum(1, 2) ); // 3
- `sum` -- имя функции, ограничения на имя функции -- те же, что и на имя переменной.
- Переменные, объявленные через `var` внутри функции, видны везде внутри этой функции, блоки `if`, `for` и т.п. на видимость не влияют.
-- Параметры передаются копируются в локальные переменные `a`, `b`.
+
- Параметры копируются в локальные переменные `a`, `b`.
- Функция без `return` считается возвращающей `undefined`. Вызов `return` без значения также возвращает `undefined`:
diff --git a/1-js/2-first-steps/6-variable-names/article.md b/1-js/2-first-steps/6-variable-names/article.md
index 751ea9dd..a802c827 100644
--- a/1-js/2-first-steps/6-variable-names/article.md
+++ b/1-js/2-first-steps/6-variable-names/article.md
@@ -39,7 +39,7 @@ var link;
Во-вторых, русский транслит хуже читается и длиннее, чем названия на английском.
-В-третьих, в проектах вы наверняка будете применять библиотеки, написанные другими людьми. Многое уже готово, в распоряжении современного разработчика есть масса инструментов, все они используют названия переменных и функций на английском языке, и вы, конечно, будете их использовать. А от кода, где транслит перемешан с английским -- могут волосы смогут встать дыбом, и не только на голове.
+В-третьих, в проектах вы наверняка будете применять библиотеки, написанные другими людьми. Многое уже готово, в распоряжении современного разработчика есть масса инструментов, все они используют названия переменных и функций на английском языке, и вы, конечно, будете их использовать. А от кода, где транслит перемешан с английским -- волосы могут встать дыбом, и не только на голове.
Если вы вдруг не знаете английский -- самое время выучить.
diff --git a/1-js/3-writing-js/1-debugging-chrome/article.md b/1-js/3-writing-js/1-debugging-chrome/article.md
index f2b01a5a..dbe08234 100644
--- a/1-js/3-writing-js/1-debugging-chrome/article.md
+++ b/1-js/3-writing-js/1-debugging-chrome/article.md
@@ -190,7 +190,7 @@ for(var i=0; i<5; i++) {
}
```
-Полную информацию по специальным командам консоли вы можете получить на странице [](https://developers.google.com/chrome-developer-tools/docs/commandline-api?hl=ru). Эти команды также действуют в Firebug (отладчик для браузера Firefox).
+Полную информацию по специальным командам консоли вы можете получить на странице [Chrome Console API](https://developer.chrome.com/devtools/docs/console-api) и [Chrome CommandLine API](https://developer.chrome.com/devtools/docs/commandline-api). Почти все команды также действуют в Firebug (отладчик для браузера Firefox).
Консоль поддерживают все браузеры, и, хотя IE10- поддерживает далеко не все функции, но `console.log` работает везде. Используйте его для вывода отладочной информации по ходу работы скрипта.
@@ -239,7 +239,7 @@ for(var i=0; i<5; i++) {
Осваивать можно двумя путями:
-- [Официальная документация](https://developers.google.com/chrome-developer-tools/docs/overview) (на англ.)
+- [Официальная документация](https://developer.chrome.com/devtools) (на англ.)
- Кликать в разных местах и смотреть, что получается. Не забывать о клике правой кнопкой мыши.
diff --git a/1-js/3-writing-js/2-coding-style/article.md b/1-js/3-writing-js/2-coding-style/article.md
index 2b165ecb..6e0fd89b 100644
--- a/1-js/3-writing-js/2-coding-style/article.md
+++ b/1-js/3-writing-js/2-coding-style/article.md
@@ -7,7 +7,6 @@
Шпаргалка с правилами синтаксиса (детально они их варианты разобраны далее):
-
-
Не всё здесь однозначно, так что разберём эти правила подробнее.
### Фигурные скобки
diff --git a/1-js/3-writing-js/2-coding-style/code-style.svg b/1-js/3-writing-js/2-coding-style/code-style.svg
index 4eeecc6c..3573dd54 100644
--- a/1-js/3-writing-js/2-coding-style/code-style.svg
+++ b/1-js/3-writing-js/2-coding-style/code-style.svg
@@ -6,7 +6,7 @@
-
+
@@ -46,8 +46,6 @@
-
-
пустая строка
между
@@ -76,8 +74,8 @@
- Пробел между
- параметрами
+ Пробел между
+ параметрами
@@ -85,6 +83,8 @@
Пробел между
параметрами
+
+
\ No newline at end of file
diff --git a/1-js/4-data-structures/2-number/article.md b/1-js/4-data-structures/2-number/article.md
index b467f990..abde96a7 100644
--- a/1-js/4-data-structures/2-number/article.md
+++ b/1-js/4-data-structures/2-number/article.md
@@ -539,7 +539,7 @@ JavaScript предоставляет базовые тригонометрич
- Возвращает арккосинус `x` (в радианах)
- `Math.asin(x)`
- Возвращает арксинус `x` (в радианах)
-- `Math.atan`
+- `Math.atan(x)`
- Возвращает арктангенс `x` (в радианах)
- `Math.atan2(y, x)`
- Возвращает угол до точки `(y, x)`. Описание функции: [Atan2](http://en.wikipedia.org/wiki/Atan2).
diff --git a/1-js/4-data-structures/3-string/3-truncate/task.md b/1-js/4-data-structures/3-string/3-truncate/task.md
index 099b9e3f..4904d5f8 100644
--- a/1-js/4-data-structures/3-string/3-truncate/task.md
+++ b/1-js/4-data-structures/3-string/3-truncate/task.md
@@ -9,7 +9,7 @@
Например:
```js
-truncate("Вот, что мне хотелось бы сказать на эту тему:", 20) = "Вот, что мне хотело..."
+truncate("Вот, что мне хотелось бы сказать на эту тему:", 20) = "Вот, что мне хоте..."
truncate("Всем привет!", 20) = "Всем привет!"
```
diff --git a/1-js/4-data-structures/3-string/article.md b/1-js/4-data-structures/3-string/article.md
index c9da01eb..8bd8d8af 100644
--- a/1-js/4-data-structures/3-string/article.md
+++ b/1-js/4-data-structures/3-string/article.md
@@ -175,7 +175,7 @@ var str = "Widget with id";
alert( str.indexOf("Widget") ); // 0, т.к. "Widget" найден прямо в начале str
alert( str.indexOf("id") ); // 1, т.к. "id" найден, начиная с позиции 1
-alert( str.indexOf("Lalala") ); // -1, подстрока не найдена
+alert( str.indexOf("widget") ); // -1, не найдено, так как поиск учитывает регистр
```
Необязательный второй аргумент позволяет искать, начиная с указанной позиции. Например, первый раз `"id"` появляется на позиции `1`. Чтобы найти его следующее появление -- запустим поиск с позиции `2`:
@@ -347,7 +347,7 @@ alert( "testme".slice(1, -1) ); // "estm", от 1 позиции до перво
Отрицательное значение первого параметра поддерживается в `substr` во всех браузерах, кроме IE8-.
-Если выбирать из этих трёх метод один, для использования в большинстве ситуаций -- то это будет `slice`: он и отрицательные аргументы поддерживает и работает наиболее очевидно.
+Если выбирать из этих трёх методов один, для использования в большинстве ситуаций -- то это будет `slice`: он и отрицательные аргументы поддерживает и работает наиболее очевидно.
## Кодировка Юникод
diff --git a/1-js/7-js-misc/5-exception/article.md b/1-js/7-js-misc/5-exception/article.md
index 6736167a..66798663 100644
--- a/1-js/7-js-misc/5-exception/article.md
+++ b/1-js/7-js-misc/5-exception/article.md
@@ -334,7 +334,17 @@ try {
Цель функции `readData` в примере выше -- прочитать данные. При чтении могут возникать разные ошибки, не только `SyntaxError`, но и, возможно, к примеру, `URIError` (неправильное применение функций работы с URI), да и другие.
-Код, который вызвал `readData`, хотел бы иметь информацию об ошибке, но проверять и перехватывать все типы ошибок ему недосуг. Тогда мы делаем одну ошибку, которая относится именно к общей операции, например `ReadError` и будем генерировать её. А "исходную" ошибку -- присваивать в свойство, на случай, если она, всё же, понадобится.
+Код, который вызвал `readData`, хотел бы иметь либо результат, либо информацию об ошибке.
+
+При этом очень важным является вопрос: обязан ли этот внешний код знать о всевозможных типах ошибок, которые могут возникать при чтении данных, и уметь перехватывать их?
+
+Обычно внешний код хотел бы работать "на уровень выше", и получать либо результат, либо "ошибку чтения данных", при этом какая именно ошибка произошла -- ему неважно. Ну, или, если будет важно, то хотелось бы иметь возможность это узнать, но обычно не требуется.
+
+Это важнейший общий подход к проектированию -- каждый участок функционала должен получать информацию на том уровне, который ему необходим.
+
+Мы его видим везде в грамотно построенном коде, но не всегда отдаём себе в этом отчёт.
+
+В данном случае, если при чтении данных происходит ошибка, то мы будем генерировать её в виде объекта `ReadError`, с соответствующим сообщением. А "исходную" ошибку -- на всякий случай тоже сохраним, присвоим в свойство `cause` (англ. -- причина).
Выглядит это так:
```js
@@ -380,6 +390,8 @@ try {
}
```
+Этот подход называют "оборачиванием" исключения, поскольку мы берём ошибки "более низкого уровня" и "заворачиваем" их в `ReadError`, которая соответствует текущей задаче.
+
## Секция finally
Конструкция `try..catch` может содержать ещё один блок: `finally`.
diff --git a/figures.sketch b/figures.sketch
index 9b0b2a8f..d109f706 100644
Binary files a/figures.sketch and b/figures.sketch differ