Операторы

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

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

Далее мы подробно рассмотрим основные типы операторов JavaScript.

Оператор присваивания
Синтаксис:
переменная = выражение

Действие
Переменной, стоящей слева от знака =, присваивается значение выражения, стоящего справа.

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

a++      // эквивалентно a = a + 1
a--      // эквивалентно a = a - 1
a += b   // эквивалентно a = a + b
a -= b   // эквивалентно a = a - b
a *= b   // эквивалентно a = a * b
a /= b   // эквивалентно a = a / b
a %= b   // эквивалентно a = a % b
a <<= b  // эквивалентно a = a << b
a >>= b  // эквивалентно a = a >> b
a >>>= b // эквивалентно a = a >>> b
a &= b   // эквивалентно a = a & b
a |= b   // эквивалентно a = a | b
a ^= b   // эквивалентно a = a ^ b

Пример:
myDate = 25;
myDate += " марта";
// теперь значением myDate стала строка "25 марта"

if
Синтаксис:
if (условие) {операторы}

Действие
Вычисляется значение логического выражения в круглых скобках (условие). Если условие истинно, выполняется группа операторов в фигурных скобках; если условие ложно, операторы в фигурных скобках не выполняются.

Круглые скобки в записи оператора if обязательны. Фигурные скобки можно опустить, если в них заключен один оператор.

if ... else
Синтаксис:
if (условие) {операторы} else {операторы}

Действие
Вычисляется значение логического выражения в круглых скобках (условие). Если условие истинно, выполняется первая группа операторов в фигурных скобках (стоящая до ключевого слова else), а вторая группа не выполняется. Если условие ложно, то, наоборот, выполняется вторая группа операторов (стоящая в фигурных скобках после else).

Круглые скобки в записи оператора if...else обязательны. Фигурные скобки можно опустить, если в них заключен один оператор.

while
Синтаксис:
while (условие) {операторы}

Действие
Вычисляется значение логического выражения в круглых скобках (условие). Если условие ложно, операторы в фигурных скобках не выполняются; управление передается следующему оператору в программе. Если же условие истинно, то операторы в фигурных скобках выполняются, а затем значение логического выражения условие вычисляется заново.

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

Круглые скобки в записи оператора while обязательны. Фигурные скобки можно опустить, если в них заключен один оператор.

Пример:
n=10;
while (n>0) {document.write(n+' ');n--}

Вот результат выполнения этого примера:

for
Синтаксис:
for (инициализация; условие; шаг) {операторы}

инициализация - это либо оператор var, либо оператор присваивания, либо несколько операторов присваивания, разделенных запятыми,
условие - это логическое выражение,
шаг - это либо оператор присваивания, либо несколько операторов присваивания, разделенных запятыми.

Действие
Цикл for выполняется так:

  1. Выполняются операторы инициализации.
  2. Вычисляется логическое выражение условие. Если условие ложно, выполнение цикла for на этом заканчивается. Если условие истинно, происходит следующее:
  3. Выполняются операторы в фигурных скобках.
  4. Выполняется шаг.
  5. Цикл продолжается с п.2.

Круглые скобки в записи цикла for обязательны. Фигурные скобки можно опустить, если в них заключен один оператор.

Обратите внимание: в круглых скобках (инициализация; условие; шаг) точка с запятой применяется только дважды. Внутри конструкций инициализация и шаг операторы разделяются запятыми.

Пример.
for (i=0,j=10;i<10;i++,j--) alert(i*j)

В этом цикле на экран последовательно выводятся десять призведений: 0*10, 1*9, 2*8 и т.д. На стадии инициализации выполняются два оператора: i=0 и j=10. Шаг цикла тоже включает два оператора: i++ и j--. Данный цикл можно переписать проще, не используя j:

for (i=0;i<10;i++) alert(i*(10-i))

for ... in
Синтаксис:
for (переменная in объект) {операторы}

Действие
Оператор for...in организует цикл по всем свойствам объекта. При каждом проходе по циклу переменная будет содержать имя очередного свойства объекта, а выражение объект[переменная] будет принимать значение свойства.

Круглые скобки в записи цикла for...in обязательны. Фигурные скобки можно опустить, если в них заключен один оператор.

Примеры.
Этот цикл поочередно выдает имена всех свойств массива arr. (Массив - это тоже объект! Имена свойств массива - это индексы элементов массива, а значения свойств - это значения элементов. Кроме того, любой массив имеет свойство length.)

arr = new Array();
arr[0]="Элемент 0";
arr[8]="Элемент 8";
for (i in arr) alert('arr.'+i+' = '+arr[i]);

В следующем примере цикл поочередно выдает имена всех свойств объекта Math и их значения (математические константы). Например, свойство PI имеет значение 3.14159265358979. Внимание! Этот пример работает в браузерах Netscape 3.x, 4.0x и MSIE3. А вот MSIE 4+ и Netscape 4.5+ не выдают ничего!

for (i in Math) alert('Math.'+i+' = '+Math[i]);

break
Синтаксис:
break;

Действие
Оператор выхода из цикла break используется только внутри циклов for, for...in, while. Оператор break прерывает нормальное выполнение цикла. Выполнение программы продолжается с оператора, следующего за циклом.

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

s='Я больше не пью по утрам';
while(true) {
 if (s==prompt('Ваше наивысшее достижение?',s)) 
    break;
}
alert ('Ну наконец-то!');

continue
Синтаксис:
continue;

Действие
Оператор continue используется только внутри циклов for, for...in, while. Этот оператор вызывает переход к началу цикла. Операторы, стоящие в цикле после continue, выполняются лишь в том случае, если не выполняется continue.

Пример: этот скрипт - интерактивная контрольная по истории. Пользователю в цикле предлагаются вопросы - элементы массива questions. Если ответ пользователя не совпадает с правильным ответом, хранящимся в массиве answers, то выполняется оператор continue; программа возвращается к началу цикла и предлагает следующий вопрос. Если пользователь отвечает правильно, то выполняются операторы, стоящие в цикле после continue.

questions=new Array ( /* вопросы */ );
answers=new Array ( /* правильные ответы */ );

for (i=0,score=0; i<questions.length; i++) {
  if (answers[i]!=prompt(questions[i],"")) continue;
  alert("Вы неплохо знаете историю!");
  score++;
}
alert ("Число правильных ответов: "+score);

return
Синтаксис:
return;
return выражение;

Действие
Оператор возврата return используется внутри функций. Он передает управление из функции обратно в вызвавший ее фрагмент программы.

Если в одной функции есть несколько операторов возврата, все они должны иметь одинаковый вид (либо просто return, либо return выражение).

Можно также использовать операторы return true и return false в обработчиках событий.

Примеры:

var
Синтаксис:
var переменная
var переменная = выражение
var переменная [= выражение] [,..., переменная [= выражение] ]

Действие
Оператор var описывает новую переменную и присваивает ей начальное значение. Если требуется сделать какую-либо переменную локальной для конкретной функции, то обязательно описать эту переменную оператором var внутри функции. Если при этом переменная с тем же именем используется также и вне данной функции, то, несмотря на совпадение имен, это будут фактически две разные переменные.

Переменные, не описанные оператором var внутри функций, будут доступны всей JavaScript-программе. Такие переменные удобно описывать оператором var в начале программы (но это не обязательно).

Также можно использовать var в заголовках циклов for и for...in. Однако в JavaScript (в отличие от C и Java) описанная таким образом переменная будет локальной не для данного цикла, а для всей функции.

Примеры:
var k=1, str="Happy New Year!";
for (var i=0;i<10;i++) alert("i = "+i);

with
Синтаксис:
with (объект) {операторы}

Действие
Ключевое слово with указывает интерпретатору JavaScript, что объект далее в программе можно опускать: вместо объект.свойство можно писать просто свойство, а вместо объект.метод - просто метод. Действие with распространяется на операторы в фигурных скобках. (Фигурные скобки можно не писать, если в них заключен один оператор.)

Пример. Пусть n - величина угла, выраженная в градусах, и надо определить сумму синуса и косинуса этого угла:

x = Math.sin(n*Math.PI/180) + Math.cos(n*Math.PI/180);
С помощью with можно записать тот же самый оператор гораздо короче, "спрятав" объект Math:
with(Math) x = sin(n*PI/180) + cos(n*PI/180);

Copyright © 1999, Alexei Kourbatov