JavaScript. Подробное руководство, 6-е издание, стр. 13

<b>  //Нарисовать отметки лет на оси Х</b>

<b>  g.textAling=&quot;center&quot;; //Текст меток по центру </b>

<b>  var y = amounToY(0); //Координата Y на оси X</b>

<b>  for (var year=1;year*12 &lt;= payments; year++) { //Для каждого года </b>

<b>    var x=paymentToX(year*12); //Вычислить позицию метки </b>

<b>    g.fillRect(x-0.5, y-3, 1, 3); //Нарисовать метку </b>

<b>    if (year == 1) g.fillText(&quot;Year&quot;, x, y-5); //  Подписать ось </b>

<b>    if (year % 5 == 0 &amp;&amp; year*12 !== payments) // Числа через каждые 5 лет</b>

<b>              g.fillText(String(year), x, y-5);</b>

<b>  }</b>

<b>  //Суммы платежей у правой границы</b>

<b>  g.textAling=&quot;right&quot;;      //Текст по правому краю </b>

<b>  g.textBaseLine=&quot;middle&quot;;  //Центрировать по вертикали </b>

<b>  var ticks = [monthly*payments, principal]; //Вывести две суммы </b>

<b>  var rightEdge = paymentToX(payments);      //Координата X на оси Y </b>

<b>  for (var i = 0; i &lt; ticks.Length; i++) {   //Для каждой из 2 сумм </b>

<b>    var y = amountToY(ticks[i]);              //Определить координату Y </b>

<b>    g.fillRect(rightEdge - 3, y - 0.5, 3, 1); //Нарисовать метку </b>

<b>    g.fillText(String(ticks[i].toFixed(0)),    //И вывести рядом сумму.</b>

<b>              rightEdge-5, y);</b>

<b>  }</b>

<b>}</b>

<b>&lt;/script&gt;</b>

<b>&lt;/body&gt;</b>

<b>&lt;/html&gt;</b>

I

Базовый JavaScript

Данная часть книги включает главы со 2 по 12, она описывает базовый язык JavaScript и задумана как справочник по языку JavaScript. Прочитав главы этой части один раз, вы, возможно, будете неоднократно возвращаться к ним, чтобы освежить в памяти более сложные особенности языка.

• Глава 2 «Лексическая структура»

• Глава 3 «Типы данных, значения и переменные»

• Глава 4 «Выражения и операторы»

• Глава 5 «Инструкции»

• Глава 6 «Объекты»

• Глава 7 «Массивы»

• Глава 8 «Функции»

• Глава 9 «Классы и модули»

• Глава 10 «Шаблоны и регулярные выражения»

• Глава 11 «Подмножества и расширения JavaScript»

• Глава 12 «Серверный JavaScript»

2

Лексическая структура

Лексическая структура языка программирования - это набор элементарных правил, определяющих, как пишутся программы на этом языке. Это низкоуровневый синтаксис языка; он определяет вид имен переменных, символы, используемые для обозначения комментариев, и то, как одна инструкция отделяется от другой. Эта короткая глава описывает лексическую структуру JavaScript.

2.1. Набор символов

При написании программ на JavaScript используется набор символов Юникода. Юникод является надмножеством кодировок ASCII и Latin-І и поддерживает практически все письменные языки, имеющиеся на планете. Стандарт ЕСМА-Script 3 требует, чтобы реализации JavaScript обеспечивали поддержку стандарта Юникода версии 2.1 или выше, а стандарт ECMAScript 5 требует, чтобы реализации обеспечивали поддержку стандарта Юникода версии 3 или выше. Более подробно о Юникоде и JavaScript говорится во врезке в разделе 3.2.

2.1.1. Чувствительность к регистру

JavaScript - это язык, чувствительный к регистру символов. Это значит, что ключевые слова, имена переменных и функций и любые другие идентификаторы языка должны всегда содержать одинаковые наборы прописных и строчных букв. Например, ключевое слово

<b>while</b>
должно набираться как «while», а не «While» или «WHILE». Аналогично
<b>online, Online, OnLine и ONLINE</b>
- это имена четырех разных переменных.

Заметим, однако, что язык разметки HTML (в отличие от XHTML) не чувствителен к регистру. Так как HTML и клиентский JavaScript тесно связаны, это различие может привести к путанице. Многие JavaScript-объекты и их свойства имеют те же имена, что и теги и атрибуты языка HTML, которые они обозначают. Однако если в HTML эти теги и атрибуты могут набираться в любом регистре, то в JavaScript они обычно должны набираться строчными буквами. Например, атрибут

<b>onclick</b>
обработчика события чаще всего задается в HTML как onClick, однако в JavaScript-коде (или в XHTML-документе) он должен быть обозначен как
<b>onclick</b>
.

2.1.2. Пробелы, переводы строк и символы управления форматом

JavaScript игнорирует пробелы, которые могут присутствовать между лексемами в программе. Кроме того, JavaScript также по большей части игнорирует символы перевода строки (за одним исключением, о котором рассказывается в разделе 2.5). Поэтому пробелы и символы перевода строки могут без ограничений использоваться в исходных текстах программ для форматирования и придания им удобочитаемого внешнего вида.

Помимо обычного символа пробела (

<b>\u0020</b>
) JavaScript дополнительно распознает как пробельные следующие символы: табуляция (
<b>\u0009</b>
), вертикальная табуляция (
<b>\u000В</b>
), перевод формата (
<b>\u000C</b>
), неразрывный пробел (
<b>\u00А0</b>
), маркер порядка следования байтов (
<b>\uFEFF</b>
), а также все символы Юникода, относящиеся к категории Zs. Следующие символы распознаются интерпретаторами JavaScript как символы конца строки: перевод строки (
<b>\u000А</b>
), возврат каретки (
<b>\u000D</b>
), разделитель строк (
<b>\u2028</b>
) и разделитель абзацев (
<b>\u2029</b>
). Последовательность из символов возврата каретки и перевода строки интерпретируется как единственный символ завершения строки.

Символы Юникода, управляющие форматом (категория Cf), такие как RIGHT-TO-LEFT MARK (

<b>\u200F</b>
) и LEFT-TO-RIGHT MARK (
<b>\u200E</b>
), управляют визуальным представлением текста, в котором они присутствуют. Они имеют большое значение для корректного отображения текста на некоторых языках и являются допустимыми в комментариях JavaScript, строковых литералах и в литералах регулярных выражений, но не в идентификаторах (таких как имена переменных), определяемых в программах JavaScript. Исключение составляют ZERO WIDTH JOINER (
<b>\u200D</b>
) и ZERO WIDTH NON-JOINER (
<b>\u200C</b>
), которые можно использовать в идентификаторах при условии, что они не являются первыми символами идентификаторов. Как отмечалось выше, символ управления порядком следования байтов (
<b>\uFEFF</b>
) интерпретируется как пробельный символ.