В общем, основной принцип выполнения всех операторов таков: сначала выполняются операторы с более высоким приоритетом, а уже потом — операторы с более низким. Операторы с одинаковым приоритетом выполняются в порядке их следования (слева направо).
В табл. 14.9 перечислены все изученные нами операторы в порядке убывания их приоритетов.
Таблица 14.9. Приоритет операторов (в порядке убывания)
ВНИМАНИЕ!
Запомните эту таблицу. Неправильный порядок выполнения операторов может стать причиной трудно выявляемых ошибок, при которых внешне абсолютно правильное выражение дает неверный результат.
Но что делать, если нам нужно нарушить обычный порядок выполнения операторов? Воспользуемся скобками. При такой записи заключенные в скобки операторы выполняются первыми:
a = (b + c) * 10;
Здесь сначала будет выполнено сложение значений переменных b и c, а потом получившаяся сумма будет умножена на 10.
Операторы, заключенные в скобки, также подчиняются приоритету. Поэтому часто используются многократно вложенные скобки:
a = ((b + c) * 10 — d) / 2 + 9;
Здесь операторы будут выполнены в такой последовательности:
1. Сложение b и c.
2. Умножение полученной суммы на 10.
3. Вычитание d из произведения.
4. Деление разности на 2.
5. Прибавление 9 к частному.
Если удалить скобки:
a = b + c * 10 — d / 2 + 9;
то порядок выполнения операторов будет таким:
1. Умножение c и 10.
2. Деление d на 2.
3. Сложение b и произведения c и 10.
4. Вычитание из полученной суммы частного от деления d на 2.
5. Прибавление 9 к полученной разности.
Получается совсем другой результат, не так ли?
Сложные выражения JavaScript
Сложные выражения получили свое название благодаря тому, что все они составлены из нескольких простых выражений. Сложные выражения выполняются специальным образом и служат для особых целей — в основном, для управления процессом выполнения содержащихся в них простых выражений.
Блоки
JavaScript позволяет нам объединить несколько выражений в одно. Такое выражение называется блочным выражением или просто блоком. Составляющие его выражения заключают в фигурные скобки, например:
{
b = "12";
c = a — b;
}
Как правило, блоки не существуют сами по себе. Чаще всего они входят в состав других сложных выражений.
Условные выражения
Условное выражение позволяет нам выполнить одно из двух входящих в него выражений в зависимости от выполнения или невыполнения какого-либо условия. В качестве условия используется значение логической переменной или результат вычисления логического выражения.
Листинг 14.7 иллюстрирует формат условного выражения.
Листинг 14.7
if (<условие>)
<блок "то">
else
<блок "иначе">
Существует также другая, "вырожденная" разновидность условного выражения,
содержащая только одно выражение, которое выполняется при выполнении условия и пропускается, если условие не выполнено:
if (<условие>)
<блок "то">
Для написания условных выражений предусмотрены особые ключевые слова if и
else. Отметим, что условие всегда записывают в круглых скобках.
Если условие имеет значение true, то выполняется блок "то". Если же условие имеет значение false, то выполняется блок "иначе" (если он присутствует в условном выражении). А если блок "иначе" отсутствует, выполняется следующее выражение Web-сценария.
ВНИМАНИЕ!
Значения null или undefined преобразуются в false. Не забываем об этом.
Рассмотрим несколько примеров.
В листинге 14.8 мы сравниваем значение переменной x с единицей и в зависимости от результатов сравнения присваиваем переменным f и h разные значения.
Листинг 14.8
if (x == 1) {
a = "Единица";
b = 1;
}
else {
a = "Не единица";
b = 22222;
}
Условие может быть довольно сложным (листинг 14.9).
Листинг 14.9
if ((x == 1) && (y > 10))
f = 3;
else
f = 33;
Здесь мы использовали сложное условие, возвращающее значение true в случае,
если значение переменной x равно 1 и значение переменной y больше 10. Заметим также, что мы подставили одиночные выражения, т. к. фрагменты кода слишком просты, чтобы оформлять их в виде блоков.
Условный оператор?
Если условное выражение совсем простое, мы можем записать его немного по-другому. А именно, воспользоваться условным оператором ?:
<условие>? <выражение "то">: <выражение "иначе">;
Достоинство этого оператора в том, что он может быть частью выражения. Например:
f = (x == 1 && y > 10)? 3: 33;
Фактически мы записали условное выражение из предыдущего примера, но в виде простого выражения. Компактность кода налицо. Недостаток же оператора? в том, что с его помощью можно записывать только самые простые условные выражения.
Приоритет условного оператора один из самых низких. Приоритет ниже него имеют только операторы присваивания.
Выражения выбора
Выражение выбора — это фактически несколько условных выражений, объединенных в одном. Его формат иллюстрирует листинг 14.10.
Листинг 14.10
switch (<исходное выражение>) {
case <значение 1> :
<блок 1>
[break;]
[case <значение 2> :
<блок 2>
[break;]]
<… другие секции case>
[default:
<блок, исполняемый для остальных значений>]
}
В выражениях выбора присутствуют ключевые слова switch, case и default.
Результат вычисления исходного выражения последовательно сравнивается со значением 1, значением 2 и т. д. и, если такое сравнение прошло успешно, выполняется соответствующий блок кода (блок 1, блок 2 и т. д.). Если же ни одно сравнение не увенчалось успехом, выполняется блок кода, находящийся в секции default (если, конечно, она присутствует).
Листинг 14.11 иллюстрирует пример выражения выбора.
Листинг 14.11
switch (a) {
case 1:
out = "Единица";
break;
case 2:
out = "Двойка";
break;
case 3:
out = "Тройка";
break;
default:
out = "Другое число";
}
Здесь, если переменная a содержит значение 1, переменная out получит значение "Единица", если 2 — значение "Двойка", а если 3 — значение "Тройка". Если же переменная a содержит какое-то другое значение, переменная out получит значение "Другое число".
Циклы
Циклы — это особые выражения, позволяющие выполнить один и тот же блок кода несколько раз. Выполнение кода прерывается по наступлению некоего условия. JavaScript предлагает программистам несколько разновидностей циклов. Рассмотрим их подробнее.
Цикл со счетчиком
Цикл со счетчиком удобен, если какой-то код нужно выполнить строго определенное число раз. Вероятно, это наиболее распространенный вид цикла.
Цикл со счетчиком записывается так:
for (<выражение инициализации>; <условие>; <приращение>)
<тело цикла>
Здесь используется ключевое слово for. Поэтому такие циклы часто называют "циклами for".
Выражение инициализации выполняется самым первым и всего один раз. Оно присваивает особой переменной, называемой счетчиком цикла, некое начальное значение (обычно 1). Счетчик цикла подсчитывает, сколько раз было выполнено тело цикла — собственно код, который нужно выполнить определенное количество раз.
Следующий шаг — проверка условия. Оно определяет момент, когда выполнение цикла прервется и начнет выполняться следующий за ним код. Как правило, условие сравнивает значение счетчика цикла с его граничным значением. Если условие возвращает true, выполняется тело цикла, в противном случае цикл завершается и начинается выполнение кода, следующего за циклом.
После прохода тела цикла выполняется выражение приращения, изменяющее значение счетчика. Это выражение обычно инкрементирует