renovations
This commit is contained in:
parent
40681dc96d
commit
0febe4f5fd
13 changed files with 30 additions and 20 deletions
|
@ -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 не присвоен
|
||||||
```
|
```
|
||||||
|
|
|
@ -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>С логическими значениями:
|
||||||
|
|
||||||
|
|
|
@ -260,7 +260,7 @@ function showMessage(from, text) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Второй способ считает, что аргумент отсутствует, если передана пустая строка, `0`, или вообще любое значение, которое в булевом виде является `false`.
|
Второй способ считает, что аргумент отсутствует, если передана пустая строка, `0`, или вообще любое значение, которое в логическом контексте является `false`.
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
|
|
@ -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`:
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ var link;
|
||||||
|
|
||||||
Во-вторых, русский транслит хуже читается и длиннее, чем названия на английском.
|
Во-вторых, русский транслит хуже читается и длиннее, чем названия на английском.
|
||||||
|
|
||||||
В-третьих, в проектах вы наверняка будете применять библиотеки, написанные другими людьми. Многое уже готово, в распоряжении современного разработчика есть масса инструментов, все они используют названия переменных и функций на английском языке, и вы, конечно, будете их использовать. А от кода, где транслит перемешан с английским -- могут волосы смогут встать дыбом, и не только на голове.
|
В-третьих, в проектах вы наверняка будете применять библиотеки, написанные другими людьми. Многое уже готово, в распоряжении современного разработчика есть масса инструментов, все они используют названия переменных и функций на английском языке, и вы, конечно, будете их использовать. А от кода, где транслит перемешан с английским -- волосы могут встать дыбом, и не только на голове.
|
||||||
|
|
||||||
Если вы вдруг не знаете английский -- самое время выучить.
|
Если вы вдруг не знаете английский -- самое время выучить.
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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 |
|
@ -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>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
Например:
|
Например:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
truncate("Вот, что мне хотелось бы сказать на эту тему:", 20) = "Вот, что мне хотело..."
|
truncate("Вот, что мне хотелось бы сказать на эту тему:", 20) = "Вот, что мне хоте..."
|
||||||
|
|
||||||
truncate("Всем привет!", 20) = "Всем привет!"
|
truncate("Всем привет!", 20) = "Всем привет!"
|
||||||
```
|
```
|
||||||
|
|
|
@ -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`: он и отрицательные аргументы поддерживает и работает наиболее очевидно.
|
||||||
|
|
||||||
## Кодировка Юникод
|
## Кодировка Юникод
|
||||||
|
|
||||||
|
|
|
@ -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`.
|
||||||
|
|
BIN
figures.sketch
BIN
figures.sketch
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue