Глава 3.2. Основные понятия

3.2.1. Структура программ на языке JavaScript

Как и во многих других языках программирования, программа (сценарий) на языке JavaScript — это текст, состоящий из операторов, блоков, т. е. взаимосвязанных наборов операторов, и комментариев. Операторы могут содержать переменные, константы и выражения. Следующий пример начинается с определения функции, которое состоит из блока, содержащего два оператора. За определением следуют два оператора, не образующих блока.

function convert(inches) {
  cm = inches * 2.54;	// Эти два оператора заключены в блок.
  meters = inches / 39.37;
}
convert(inches);	// Эти два оператора не образуют блока.
km = meters / 1000;

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

Строка сценария, содержащая только точку с запятой, считается пустым оператором, т. е. оператором, не выполняющим никакого действия. Тем не менее, в некоторых случаях использование пустого оператора удобно, например:

while (i--)	// Цикл состоит в уменьшении i до нуля,
  ;		// поэтому его телом является пустой оператор.

Для удобства чтения программы и форматирования ее текста могут использоваться символы пробела. Эти символы игнорируются всюду, кроме строковых констант и регулярных выражений, в которых они являются значимыми. Символами пробела в JavaScript считаются следующие символы Unicode:

  • пробел (\u0020);
  • табуляция (\u0009);
  • вертикальная табуляция (\u000B);
  • перевод формата (\u000C);
  • неразрывный пробел (\u00A0).

Символы разрыва строки также используются для форматирования текста, но они могут иметь значение и с точки зрения синтаксиса программы. Формальные правила использования разрывов строк в JavaScript довольно сложны, но на практике достаточно помнить только то, что обычно рекомендуется начинать новый оператор с новой строки. Символами разрыва строки в JavaScript считаются следующие символы Unicode:

  • перевод строки (\u000A);
  • возврат каретки (\u000D);
  • разделитель строк (\u2028);
  • разделитель абзацов (\u2029).

3.2.2. Комментарии

Комментарии в JavaScript могут быть однострочными и многострочными. Однострочные комментарии начинаются с символов // и продолжаются до конца текущей строки, как показано в приведенном выше примере. Многострочные комментарии заключаются в маркеры /* и */, например:

/* Это пример комментария,
   содержащего несколько строк. */

Многострочные комментарии не могут быть вложены друг в друга. Текст комментария полностью игнорируется при выполнении программы.

3.2.3. Зарезервированные слова

Следующие имена являются ключевыми словами языка JavaScript и не могут употребляться в качестве идентификаторов:

break delete function return typeof
case do if switch var
catch else in this void
continue finally instanceof throw while
default for new try with

Следующие имена являются ключевыми словами в предлагаемых расширениях языка JavaScript и также не должны употребляться в качестве идентификаторов в целях совместимости с будущими версиями языка:

absract double implements private throws
boolean enum import protected transient
byte export int public volatile
char extends interface short
class final long static
const float native super
debugger goto package synchronized

3.2.4. Идентификаторы

Идентификаторы используются в JavaScript в качестве имен переменных. Они могут начинаться с латинской буквы, символа "$" (знак доллара) или символа "_" (подчеркивание) и должны состоять из латинских букв, цифр и символов "$" и "_". Знак доллара рекомендуется использовать только в идентификаторах программ, которые автоматически генерируются другими программами. Идентификаторы не могут совпадать с зарезервированными словами. Два идентификатора считаются равными, если они текстуально совпадают; это означает, что JavaScript проводит различие между строчными и прописными буквами. Примеры синтаксически правильных идентификаторов:

MyIdentfier another_identifier $id _function123

3.2.5. Переменные

3.2.5.1. Декларация переменных

Переменные используются в качестве символических имен, принимающих различные значения. Имена переменных задаются идентификаторами. Переменная создается в момент ее декларации. JavaScript позволяет декларировать переменную двумя способами:

  • С помощью ключевого слова var, например, var x; или var x = 21;.
  • Просто присваиванием переменной значения, например x = 21;.

Если декларация переменной не содержит присваивания ей значения, то ее значением считается undefined. Мы можем проверять, определено ли значение переменной, и предпринимать соответствующие действия. Пример:

var text;
if (text == undefined)
  document.write("Текст не задан");
else
  document.write("Текст:" + text);

В этом примере значение переменной text не определено, поэтому будет выполнен первый оператор document.write.

В самом общем виде декларация переменных имеет вид:

var идентификатор[=инициализатор]?[,идентификатор[=инициализатор]?]?

Здесь инициализатор — это любое выражение, значение которого присваивается переменной при ее создании. Пример:

var a = 0, b, c = "текст", x, y = false;

3.2.5.2. Область действия переменных

Область действия переменной определяется положением ее декларации в тексте программы. Существуют три типа исполняемого кода JavaScript, называемых контекстом исполнения:

  • Глобальный контекст, т. е. исходный текст сценариев, не включая тела функций.
  • Локальный контекст, т. е. исходный текст сценариев, являющийся телом функции, а также аргумент конструктора встроенного объекта Function. Точнее говоря, если последним параметром конструктора Function является строка текста, то она интерпретируется как тело функции.
  • Eval-контекст, т. е. аргумент метода eval. Если параметром метода eval является строка текста, то она интерпретируется как программа на языке JavaScript, имеющая тот же контекст, в котором был вызван этот метод.

Иными словами, любая переменная, декларированная вне тела всех функций, является глобальной и доступна всюду в тексте данной программы. Переменная, декларированная в теле функции, является локальной и доступна только внутри тела этой функции. Об особенностях eval-контекста см. описание метода eval.

Для декларации глобальных переменных ключевое слово var не обязательно. Однако, оно обязательно при декларации локальных переменных.

3.2.6. Константы

Константы используются для задания постоянных значений. В JavaScript имеется несколько типов констант, соответствующих его встроенным типам, а именно:

  • нулевая константа null типа Null;
  • логические константы true (истина) и false (ложь) типа Boolean;
  • строковые константы типа String, например, "Привет всем!";
  • числовые константы типа Number, например, 21 или 3.1415926.

Особую группу констант составляют регулярные выражения, которые описаны в гл. 3.5.

3.2.6.1. Строковые константы

Строковая константа — это нуль или более символов Unicode, заключенных в одинарные или двойные кавычки. Обычно строковые константы заключают в двойные кавычки, а одинарные кавычки используются только для тех строк, которые сами содержат двойную кавычку. Примеры:

"Это строковая константа."
'"Эй, вы, там наверху!", - пела Алла Пугачева.'

Строка, не содержащая символов ('' или ""), называется пустой строкой. Символы Unicode, входящие в состав строки, могут задаваться своим числовым кодом с помощью escape-последовательностей вида \uXXXX, где XXXX — шестнадцатеричный код символа Unicode. Символы с кодами, меньше 256, могут задаваться escape-последовательностями вида \xXX, где XX — шестнадцатеричный код символа Unicode. Кроме того, несколько символов могут обозначаться специальными escape-последовательностями:

\0 \u0000 нуль (NUL)
\b \u0008 забой (BS)
\t \u0009 табуляция (HT)
\n \u000A перевод строки (LF)
\v \u000B вертикальная табуляция (VT)
\f \u000C перевод формата (FF)
\r \u000D возврат каретки (CR)
\" \u0022 двойная кавычка (")
\' \u0027 одинарная кавычка (')
\\ \u005C обратная косая черта (\)

Пример строковых констант, содержащих специальные символы:

"Графический образ хранится в файле C:\\webstuff\\mypage\\gifs\\garden.gif."
"Эта строка заканчивается разрывом строки.\r\n"

Примечание. Internet Explorer распознает символ "\v" только в регулярных выражениях.

3.2.6.2. Числовые константы

Числовые константы могут быть как целыми, так и плавающими. JavaScript не проводит между ними различия и, в действительности, хранит все числа как плавающие. Целые числа могут быть положительными, отрицательными и нулем. По системе счисления они могут быть десятичными, восьмеричными и шестнадцатеричными:

  • Десятичные числа — это просто набор десятичных цифр, например: 1234, -256.
  • Восьмеричные числа начинаются с 0 и состоят из цифр 0 — 7, например: 01234, -067.
  • Шестнадцатеричные числа начинаются с 0x или 0X и состоят из цифр 0 — 9 и букв A — F в любом регистре, например: 0xA000, 0Xa000, -0x1234.

Плавающие числа отличаются наличием или десятичной точки, или буквы e в любом регистре, задающей степень десяти в научной нотации, или того и другого. Примеры плавающих чисел:

0.0001, .0001, 1e-4, 1.0E-4 // Четыре плавающих числа, равных друг другу
-1.23e2 // Плавающее число, равное -123