HTML: Популярный самоучитель - Александр Чиртик
Шрифт:
Интервал:
Закладка:
Следующим рассмотрим оператор if, который позволяет выбрать выполнение одной из двух последовательностей операторов в зависимости от истинности или ложности выражения‑условия. Оператор if имеет следующий формат:
if (условие) оператор1
else оператор2
Если значение выражения условие равно true, то выполняется оператор1 (это может быть как простой, так и составной оператор), в противном случае выполняется оператор2 (также или простой, или составной оператор). Часть else оператор2 является необязательной. Ниже приведено несколько примеров использования оператора if:
if (b != 0) a /= b; //Проверяется отсутствие деления на ноль
else {
//Какие-то действия по информированию (в данном случае ничего)
}
if (a > 12)
if (a<25); //Действия при 12 < a < 25
else; //Действия при a > 25
В приведенном примере проиллюстрирована одна проблема, с которой часто сталкиваются начинающие программисты на C‑подобных языках. Здесь специально проставлены отступы так, чтобы проиллюстрировать тот факт, что ключевое слово else относится к последнему по порядку оператору if. Если бы использовался блок, то принадлежность else была бы очевидной:
if (a > 12){
if (a<25) ; //Действия при 12 < a < 25
else ; //Действия при a > 25
}
Напоследок осталось рассмотреть последний из условных операторов – оператор множественного выбора switch. Он позволяет выбрать одну из многих альтернатив в зависимости от значения заданного выражения. Формат оператора приведен ниже:
switch (выражение){
case выражение1:
операторы1
case выражение2:
операторы2
...
default:
операторы_по_умолчанию
}
Оператор switch работает следующим образом. Сначала вычисляется значение выражения выражение. Далее это значение сравнивается с выражениями при каждом ключевом слове case сверху вниз. Если, например, значение выражение совпало со значением выражение2, то выполняется последовательность операторов операторы2. Выполнение продолжается до тех пор, пока не будет встречен оператор break либо выполнение не дойдет до конца тела оператора switch (закрывающая скобка }). Если перед следующим ключевым словом case отсутствует оператор break, то выполнится последовательность операторов операторы3 и т. д. Ключевое слово default используется для того, чтобы задать последовательность операторов, которые должны выполниться при несовпадении значения выражение со всеми выражениями при всех ключевых словах case. Для иллюстрации сказанного приводится пример использования оператора switch:
switch (var){
case 1:
//Операторы выполнятся при var == 1
break;
case 2:
//Операторы выполнятся при var == 2
case 3:
//Операторы выполнятся при var == 2 или var == 3
break;
case 4:
//Операторы выполнятся при var == 4
default:
//Операторы выполнятся при var != 1 && var != 2 && var != 3
}
Циклы
Язык JavaScript поддерживает три вида циклов: for, while и do-while. Начнем с более простых циклов while и do-while. Цикл while позволяет выполнять нужные действия, пока истинно выражение‑условие. Формат оператора while следующий:
while (условие) оператор
Здесь условие – логическое выражение (аналогично операторам if и ?), а оператор – простой или составной оператор, выполняемый при каждой итерации цикла. Пример использования цикла while:
var i = 0;
while (i<10){
//Какие-то действия...
i++; //Не забываем увеличить итератор, чтобы случайно
//не организовать бесконечный цикл
}
Следующий оператор цикла do-while имеет следующий формат:
do оператор while (условие)
Этот оператор цикла аналогичен оператору while с тем лишь отличием, что условие в цикле do-while проверяется после выполнения каждой итерации. Это значит, что оператор выполнится как минимум один раз. Предыдущий пример можно записать с использованием оператора do-while следующим образом:
var i = 0;
do{
//Какие-то действия...
i++; //Не забываем увеличить итератор, чтобы случайно
//не организовать бесконечный цикл
}while (i<10);
Теперь рассмотрим оставленный напоследок цикл for. Оператор for имеет следующий формат:
for (выражение1; условие; выражение2) оператор
Значение выражения выражение1 рассчитывается перед первой итерацией цикла. Обычно это инициализация счетчика или другой переменной, нужной в цикле. Операторы в теле цикла (оператор) выполняются до тех пор, пока истинно значение выражения условие. Перед второй и последующей итерациями вычисляется значение выражения выражение2 (обычно это выражение по изменению переменной цикла). Для демонстрации использования цикла for ниже приводится пример (аналог примеров для циклов while и do-while):
var i;
for(i=0; i<10; i++){
//Какие-то действия...
}
Операторы break и continue
Оператор break, помимо прерывания выполнения последовательности операторов внутри оператора switch, используется для прерывания итерации циклов. В следующем примере выполнение цикла for прерывается как раз с помощью оператора break:
var i;
for (i=0; i<10; i++){
//Действия...
if (i == 5) break;
}
Если в теле цикла встречается оператор continue, то остальные операторы игнорируются, а выполнение переходит на проверку условия цикла. Например, в следующем цикле суммируются значения от 1 до 10 (с помощью оператора continue игнорируются значения 5 и 7):
var i, sum = 0;
for (i=0; i<10; i++){
if (i == 5 || i == 7) continue;
sum += i;
}
Оператор запятая
Оператор полезен в тех случаях, когда нужно одновременно вычислить значение нескольких выражений в том месте, где допускается запись только одного. Рассмотрим этот случай на примере оператора for. Пусть нужно, чтобы в цикле было два итератора, но очень не хочется писать увеличение (уменьшение) одного из них в теле цикла. С использованием оператора , (запятая) можно разрешить проблему следующим образом:
var i, j;
for (i=0, j=100; i<j; i++, j–){
//Действия ...
}
Выражения, разделенные оператором , (запятая), вычисляются слева направо. При этом возвращаемым значением будет значение самого левого выражения. В следующем примере значение переменной res будет равным 3, а не 6:
var res, val = 2;
res = val+=1, val=5;
Из этого примера можно подчеркнуть одну особенность всех операторов присваивания языка JavaScript: они тоже возвращают значение. Корректными являются конструкции вида:
a = 1 + (b = c = d = 25);
Здесь значением переменной a будет 26, а остальных переменных – 25. Все сказанное об операторе , (запятая) не касается использования этого оператора при вызове функций.
12.6. Функции
Функции применяются в тех случаях, когда недостаточно программы, представляющей собой простую последовательность операторов, выполняющуюся один раз. В этом случае применение функций позволяет сгруппировать операторы и выполнять их произвольное количество раз (вызывая функцию из любого места программы). Упрощенно о функции можно сказать, что это именованная последовательность операторов.
Пользовательские функции
Пользовательская функция – любая функция, созданная программистом (а не встроенная в интерпретатор). Для создания пользовательских функций применяется следующая конструкция:
function имя_функции(параметр1, параметр2, ...){
//Операторы тела функции
return выражение
}
Здесь имя_функции – имя, идентификатор функции. На него распространяются те же ограничения, что и на имя любой переменной. В скобках задается список формальных параметров функции (она может и не иметь параметров). Каждый элемент этого списка – идентификатор переменной. Переменные с указанными в списке идентификаторами могут использоваться в функции так, как будто они были объявлены с использованием var (дополнительно эти переменные инициализируются значениями, переданными в функцию). Для возврата результата выполнения функции используется оператор return.
Рассмотрим пример функции, принимающей два значения и возвращающей сумму переданных ей значений:
function sum (v1, v2){
//Вычисляем сумму двух значений
return v1 + v2;
}
Для вызова этой функции в любом месте программы, а также в теле другой функции должна использоваться следующая запись:
sum(выражение1, выражение2)
Значения двух указанных выражений и будут переданы в функцию в качестве значений переменных v1 и v2. Если результат, возвращаемый функцией, используется, то в этом случае вызов функции записывают в правой части операторов присваивания либо как аргумент оператора в выражении, например:
summa = sum(3, 4); //В переменную summa заносится 7
summa = sum(3, sum(4, 5)); //Суммируются три значения
Встроенные функции JavaScript
Программист на JavaScript может использовать некоторые встроенные в интерпретатор функции, позволяющие значительно упростить некоторые аспекты программирования, связанные с преобразованиями строковых значений, вычислениями значений выражений. Эти функции приведены в табл. 12.5.
Таблица 12.5. Встроенные функции JavaScriptГлобальные и локальные переменные