renovations

This commit is contained in:
Ilya Kantor 2015-03-09 18:40:33 +03:00
parent 40681dc96d
commit 0febe4f5fd
13 changed files with 30 additions and 20 deletions

View file

@ -72,7 +72,7 @@ JavaScript вычисляет несколько ИЛИ слева направ
//+ run //+ run
var x; var x;
*!*true*/!* || (x = 1); // просто вычислим ИЛИ, без if *!*true*/!* || (x = 1);
alert(x); // undefined, x не присвоен alert(x); // undefined, x не присвоен
``` ```

View file

@ -85,7 +85,7 @@ alert( +false); // 0
alert( "\n0 " == 0 ); // true alert( "\n0 " == 0 ); // true
``` ```
При этом строка `"\n"` преобразуется к числу, как указано выше: начальные и конечные пробелы обрезаются, получается строка `"0"`, которая равна `0`.</li> При этом строка `"\n"` преобразуется к числу, как указано выше: начальные и конечные пробелы обрезаются, получается пустая строка `""`, которая равна `0`.</li>
</li> </li>
<li>С логическими значениями: <li>С логическими значениями:

View file

@ -260,7 +260,7 @@ function showMessage(from, text) {
} }
``` ```
Второй способ считает, что аргумент отсутствует, если передана пустая строка, `0`, или вообще любое значение, которое в булевом виде является `false`. Второй способ считает, что аргумент отсутствует, если передана пустая строка, `0`, или вообще любое значение, которое в логическом контексте является `false`.
</li> </li>
</ol> </ol>

View file

@ -328,7 +328,7 @@ alert( sum(1, 2) ); // 3
<ul> <ul>
<li>`sum` -- имя функции, ограничения на имя функции -- те же, что и на имя переменной.</li> <li>`sum` -- имя функции, ограничения на имя функции -- те же, что и на имя переменной.</li>
<li>Переменные, объявленные через `var` внутри функции, видны везде внутри этой функции, блоки `if`, `for` и т.п. на видимость не влияют.</li> <li>Переменные, объявленные через `var` внутри функции, видны везде внутри этой функции, блоки `if`, `for` и т.п. на видимость не влияют.</li>
<li>Параметры передаются копируются в локальные переменные `a`, `b`. <li>Параметры копируются в локальные переменные `a`, `b`.
</li> </li>
<li>Функция без `return` считается возвращающей `undefined`. Вызов `return` без значения также возвращает `undefined`: <li>Функция без `return` считается возвращающей `undefined`. Вызов `return` без значения также возвращает `undefined`:

View file

@ -39,7 +39,7 @@ var link;
Во-вторых, русский транслит хуже читается и длиннее, чем названия на английском. Во-вторых, русский транслит хуже читается и длиннее, чем названия на английском.
В-третьих, в проектах вы наверняка будете применять библиотеки, написанные другими людьми. Многое уже готово, в распоряжении современного разработчика есть масса инструментов, все они используют названия переменных и функций на английском языке, и вы, конечно, будете их использовать. А от кода, где транслит перемешан с английским -- могут волосы смогут встать дыбом, и не только на голове. В-третьих, в проектах вы наверняка будете применять библиотеки, написанные другими людьми. Многое уже готово, в распоряжении современного разработчика есть масса инструментов, все они используют названия переменных и функций на английском языке, и вы, конечно, будете их использовать. А от кода, где транслит перемешан с английским -- волосы могут встать дыбом, и не только на голове.
Если вы вдруг не знаете английский -- самое время выучить. Если вы вдруг не знаете английский -- самое время выучить.
</li> </li>

View file

@ -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` работает везде. Используйте его для вывода отладочной информации по ходу работы скрипта. Консоль поддерживают все браузеры, и, хотя IE10- поддерживает далеко не все функции, но `console.log` работает везде. Используйте его для вывода отладочной информации по ходу работы скрипта.
@ -239,7 +239,7 @@ for(var i=0; i<5; i++) {
Осваивать можно двумя путями: Осваивать можно двумя путями:
<ol> <ol>
<li>[Официальная документация](https://developers.google.com/chrome-developer-tools/docs/overview) (на англ.)</li> <li>[Официальная документация](https://developer.chrome.com/devtools) (на англ.)</li>
<li>Кликать в разных местах и смотреть, что получается. Не забывать о клике правой кнопкой мыши.</li> <li>Кликать в разных местах и смотреть, что получается. Не забывать о клике правой кнопкой мыши.</li>
</ol> </ol>

View file

@ -7,7 +7,6 @@
Шпаргалка с правилами синтаксиса (детально они их варианты разобраны далее): Шпаргалка с правилами синтаксиса (детально они их варианты разобраны далее):
<img src="code-style.svg"> <img src="code-style.svg">
<!-- <!--
@ -16,7 +15,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;
@ -34,7 +33,6 @@ if (n < 0) {
``` ```
--> -->
Не всё здесь однозначно, так что разберём эти правила подробнее. Не всё здесь однозначно, так что разберём эти правила подробнее.
### Фигурные скобки ### Фигурные скобки

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Before After
Before After

View file

@ -539,7 +539,7 @@ JavaScript предоставляет базовые тригонометрич
<dd>Возвращает арккосинус `x` (в радианах)</dd> <dd>Возвращает арккосинус `x` (в радианах)</dd>
<dt>`Math.asin(x)`</dt> <dt>`Math.asin(x)`</dt>
<dd>Возвращает арксинус `x` (в радианах)</dd> <dd>Возвращает арксинус `x` (в радианах)</dd>
<dt>`Math.atan`</dt> <dt>`Math.atan(x)`</dt>
<dd>Возвращает арктангенс `x` (в радианах)</dd> <dd>Возвращает арктангенс `x` (в радианах)</dd>
<dt>`Math.atan2(y, x)`</dt> <dt>`Math.atan2(y, x)`</dt>
<dd>Возвращает угол до точки `(y, x)`. Описание функции: [Atan2](http://en.wikipedia.org/wiki/Atan2).</dd> <dd>Возвращает угол до точки `(y, x)`. Описание функции: [Atan2](http://en.wikipedia.org/wiki/Atan2).</dd>

View file

@ -9,7 +9,7 @@
Например: Например:
```js ```js
truncate("Вот, что мне хотелось бы сказать на эту тему:", 20) = "Вот, что мне хотело..." truncate("Вот, что мне хотелось бы сказать на эту тему:", 20) = "Вот, что мне хоте..."
truncate("Всем привет!", 20) = "Всем привет!" truncate("Всем привет!", 20) = "Всем привет!"
``` ```

View file

@ -175,7 +175,7 @@ var str = "Widget with id";
alert( str.indexOf("Widget") ); // 0, т.к. "Widget" найден прямо в начале str alert( str.indexOf("Widget") ); // 0, т.к. "Widget" найден прямо в начале str
alert( str.indexOf("id") ); // 1, т.к. "id" найден, начиная с позиции 1 alert( str.indexOf("id") ); // 1, т.к. "id" найден, начиная с позиции 1
alert( str.indexOf("Lalala") ); // -1, подстрока не найдена alert( str.indexOf("widget") ); // -1, не найдено, так как поиск учитывает регистр
``` ```
Необязательный второй аргумент позволяет искать, начиная с указанной позиции. Например, первый раз `"id"` появляется на позиции `1`. Чтобы найти его следующее появление -- запустим поиск с позиции `2`: Необязательный второй аргумент позволяет искать, начиная с указанной позиции. Например, первый раз `"id"` появляется на позиции `1`. Чтобы найти его следующее появление -- запустим поиск с позиции `2`:
@ -347,7 +347,7 @@ alert( "testme".slice(1, -1) ); // "estm", от 1 позиции до перво
Отрицательное значение первого параметра поддерживается в `substr` во всех браузерах, кроме IE8-. Отрицательное значение первого параметра поддерживается в `substr` во всех браузерах, кроме IE8-.
Если выбирать из этих трёх метод один, для использования в большинстве ситуаций -- то это будет `slice`: он и отрицательные аргументы поддерживает и работает наиболее очевидно. Если выбирать из этих трёх методов один, для использования в большинстве ситуаций -- то это будет `slice`: он и отрицательные аргументы поддерживает и работает наиболее очевидно.
## Кодировка Юникод ## Кодировка Юникод

View file

@ -334,7 +334,17 @@ try {
Цель функции `readData` в примере выше -- прочитать данные. При чтении могут возникать разные ошибки, не только `SyntaxError`, но и, возможно, к примеру, `URIError` (неправильное применение функций работы с URI), да и другие. Цель функции `readData` в примере выше -- прочитать данные. При чтении могут возникать разные ошибки, не только `SyntaxError`, но и, возможно, к примеру, `URIError` (неправильное применение функций работы с URI), да и другие.
Код, который вызвал `readData`, хотел бы иметь информацию об ошибке, но проверять и перехватывать все типы ошибок ему недосуг. Тогда мы делаем одну ошибку, которая относится именно к общей операции, например `ReadError` и будем генерировать её. А "исходную" ошибку -- присваивать в свойство, на случай, если она, всё же, понадобится. Код, который вызвал `readData`, хотел бы иметь либо результат, либо информацию об ошибке.
При этом очень важным является вопрос: обязан ли этот внешний код знать о всевозможных типах ошибок, которые могут возникать при чтении данных, и уметь перехватывать их?
Обычно внешний код хотел бы работать "на уровень выше", и получать либо результат, либо "ошибку чтения данных", при этом какая именно ошибка произошла -- ему неважно. Ну, или, если будет важно, то хотелось бы иметь возможность это узнать, но обычно не требуется.
Это важнейший общий подход к проектированию -- каждый участок функционала должен получать информацию на том уровне, который ему необходим.
Мы его видим везде в грамотно построенном коде, но не всегда отдаём себе в этом отчёт.
В данном случае, если при чтении данных происходит ошибка, то мы будем генерировать её в виде объекта `ReadError`, с соответствующим сообщением. А "исходную" ошибку -- на всякий случай тоже сохраним, присвоим в свойство `cause` (англ. -- причина).
Выглядит это так: Выглядит это так:
```js ```js
@ -380,6 +390,8 @@ try {
} }
``` ```
Этот подход называют "оборачиванием" исключения, поскольку мы берём ошибки "более низкого уровня" и "заворачиваем" их в `ReadError`, которая соответствует текущей задаче.
## Секция finally ## Секция finally
Конструкция `try..catch` может содержать ещё один блок: `finally`. Конструкция `try..catch` может содержать ещё один блок: `finally`.

Binary file not shown.