вий в цепочке if... else, которое равно true. Если же ни одно
из условий не даст true, будет выполнено тело else.
100 Часть I. Основы
Также обратите внимание: указывать завершающее else необяза-
тельно. Однако если вы этого не сделаете, то в случае, когда ни одно из усло-
вий не дает true, ничего из цепочки if... else выполнено не будет.
var lemonChicken = false;
var beefWithBlackBean = false;
var sweetAndSourPork = false;
if (lemonChicken) {
console.log("Отлично! Я буду курицу с лимоном!");
} else if (beefWithBlackBean) {
console.log("Заказываю говядину.");
} else if (sweetAndSourPork) {
console.log("Ладно, закажу свинину.");
}
В этом примере мы не стали указывать завершающую секцию else.
Поскольку ни одного из ваших любимых блюд нет, в консоли не появится
никаких сообщений (и, по всей видимости, вы останетесь без обеда).
ПОПР ОБУ ЙТЕ !
Напишите программу с переменной name. Если в этой переменной находится
ваше имя, напечатайте: «Привет мне!» — иначе напечатайте: «Привет,
незнакомец!» (Подсказка: используйте === для сравнения переменной name
с вашим именем.)
Теперь дополните программу, чтобы она здоровалась с вашим папой,
если в name его имя, и с вашей мамой, если в name ее имя. Если же там
что-то иное, по-прежнему печатайте «Привет, незнакомец!».
Циклы
Как мы теперь знаем, условные конструкции позво-
ляют запускать фрагмент кода, если условие дает
true. Циклы, с другой стороны, позволяют выполнять
фрагмент кода многократно — до тех пор, пока некое
условие дает true. Примеры: до тех пор, пока в тарелке
есть пища, следует продолжать есть; до тех пор, пока
на лице грязь, следует продолжать умываться.
Цикл while
Самый простой из циклов — цикл while. Этот цикл снова и снова выпол-
While — до тех
няет код своего тела, до тех пор, пока заданное условие не перестанет давать
пор, пока
true. Используя цикл while, мы имеем в виду следующее: «Продолжай
делать это, пока условие дает true. Но если оно даст false, остановись».
6. Условия и циклы 101
Как видно на рис. 6.4, цикл while начинается с ключевого слова
while, после которого в скобках стоит условие, а за ним идет тело,
заключенное в фигурные скобки.
Это условие проверяется
при каждом повторе цикла
while (condition) {
console.log("Делаем что-то");
i++;
}
Код, который будет выполняться снова и снова,
до тех пор, пока условие дает true
(что-то в этом коде должно влиять на условие,
чтобы в какой-то момент оно дало false)
Рис. 6.4. Общая структура цикла while
Аналогично конструкции if, тело цикла while выполняется, если
заданное условие дает true. Но, в отличие от if, после того как тело
цикла выполнено, условие будет проверено снова, и, если оно все еще
дает true, тело цикла начнет выполняться опять. И так будет продол-
жаться, пока условие не даст false.
Считаем овец с помощью цикла while
Предположим, у вас проблемы со сном и вы решили посчитать овец.
Но раз уж вы программист, почему бы не написать программу, которая
будет считать овец за вас?
var sheepCounted = 0;
Sheep
while (sheepCounted < 10) {
counted —
console.log("Посчитано овец: " + sheepCounted + "!");
посчитанные
sheepCounted++;
овцы
}
console.log("Хрррррррррр-псссс");
Мы создали переменную sheepCounted
и задали ей значение 0. Дойдя до цикла
while в строке , мы проверяем, правда ли,
что sheepCountedменьше 10. Поскольку
0 меньше 10, выполняется код в фигурных
скобках (тело цикла, которое начинается
со строки ) и выражение "Посчитано
овец: " + sheepCounted + "!" выводится в консоль как «Посчитано
овец: 0!». Далее команда sheepCounted++ увеличивает значение
102 Часть I. Основы
sheepCounted на 1, мы возвращаемся к началу цикла, и все повторя-
ется снова:
Посчитано овец: 0!
Посчитано овец: 1!
Посчитано овец: 2!
Посчитано овец: 3!
Посчитано овец: 4!
Посчитано овец: 5!
Посчитано овец: 6!
Посчитано овец: 7!
Посчитано овец: 8!
Посчитано овец: 9!
Хрррррррррр-псссс
Тело цикла повторяется, пока sheepCounted не примет значение 10,
после чего условие становится ложным (false), ведь 10 не меньше 10.
И тогда программа переходит к строке, идущей после цикла, — в данном
случае на консоль выводится "Хрррррррррр-псссс".
Бесконечный цикл
Имея дело с циклами, помните: если условие никогда не даст false,
цикл будет повторяться бесконечно (по крайней мере до тех пор, пока
вы не закроете страницу в браузере). Например, не будь в теле цикла
строчки sheepCounted++;, в sheepCountedвсегда был бы 0 и про-
грамма печатала бы:
Посчитано овец: 0!
Посчитано овец: 0!
Посчитано овец: 0!
Посчитано овец: 0!
...
Поскольку повторения цикла ничем не ограничены, программа
будет печатать эту строку снова и снова, без конца. Это называется бес-
конечным циклом.
Цикл for
Оператор for упрощает создание циклов, устроенных следующим For — для
образом: сначала создается переменная, а затем тело цикла выполня-
ется снова и снова до тех пор, пока условие дает true, причем в конце
каждого повтора значение переменной обновляется. Программируя
цикл for, мы создаем переменную, задаем условие, указываем, как
6. Условия и циклы 103
должна меняться переменная после каждого повтора, — и лишь затем
переходим к написанию тела цикла. Например, вот как можно считать
овец с помощью for:
for (var sheepCounted = 0; sheepCounted < 10; sheepCounted++) {
console.log("Посчитано овец: " + sheepCounted + "!");
}
console.log("Хрррррррррр-псссс");
Согласно рис. 6.5, в составе цикла for есть три выражения, раз-
деленные точками с запятой: это настройка, проверка условия и при -
ращение.
Код, который будет
Этот код будет выполнен
Условие:
выполняться после каждого
до начала цикла
true или false
повтора тела цикла
for (настройка; условие; приращение) {
console.log("Делаем что-то");
}
Код, который будет выполняться
до тех пор, пока условие дает true
Рис. 6.5. Общая структура цикла for
Настройка (var sheepCounted = 0) выполняется до запуска цикла.
Как правило, здесь создают переменную для отслеживания количества
повторов. В нашем случае это переменная sheepCounted с начальным
значением 0.
Условие (sheepCounted < 10) проверяется перед каждым повто-
ром тела цикла. Если условие дает true, тело выполняется, иначе цикл
заканчивает работу. В нашем случае цикл остановится, когда значение
sheepCounted достигнет 10.
Приращение (sheepCounted++) выполняется после каждого
повтора тела цикла. Как правило, здесь изменяют значение перемен-
ной цикла. В этом примере мы после каждого повтора увеличиваем
sheepCounted на 1.
Циклы for удобны, когда нужно сделать что-то определенное коли-
чество раз. Например, эта программа три раза выведет слово «Привет!».
Times to
var timesToSayHello = 3;
say hello —
for (var i = 0; i < timesToSayHello; i++) {
сколько
console.log("Привет!");
раз сказать
}
«привет»
104 Часть I. Основы
Вот что появится в консоли:
Привет!
Привет!
Привет!
Вообразите, что вы интерпретатор JavaScript, который выполняет
этот код. Сначала вы создадите переменную timesToSayHello, задав ей
значение 3. Дойдя до цикла for, вы выполните настройку, то есть соз-
дадите переменную i и присвоите ей значение 0. Далее вы проверите
условие. Поскольку в переменной i сейчас 0, а в timesToSayHello — 3,
условие даст true и вы запустите тело цикла, где печатается строка
"Привет!". А затем выполните приращение, то есть увеличитеi на 1.
Теперь снова проверьте условие. Оно по-прежнему даст true, и вы
опять перейдете к телу цикла, а затем к приращению. И так будет проис-
ходить до тех пор, пока i не примет значение 3. После этого условие даст
false (3 не меньше, чем 3) — таким образом, вы завершите цикл.
Цикл for, массивы и строки
Очень часто цикл for используют для перебора всех элементов массива
или всех символов строки. Например, вот цикл, который печатает назва-
ния всех животных, которые есть в зоопарке:
var animals = ["лев", "фламинго", "белый медведь", "удав"]; for (var i = 0; i < animals.length; i++) {
console.log("В этом зоопарке есть " + animals[i] + ".");
}
В этом цикле i сначала равняется 0, а затем возрастает до значения
animals.length - 1, то есть 3. Числа 0, 1, 2 и 3 — индексы элементов в мас-
сиве animals. Это значит, что при каждом повторе цикла i принимает зна-
чение очередного индекса, а animals[i] соответствует
очередному животному из массива animals. Когда в i
число 0, animals[i] даст нам строку "лев". Когда в i
число 1, animals[i] даст "фламинго" и т. д.
Запустив эту программу, мы увидим:
В этом зоопарке есть лев.
В этом зоопарке есть фламинго.
В этом зоопарке есть белый медведь.
В этом зоопарке есть удав.
6. Условия и циклы 105
Как мы уже знаем из второй главы, к отдельным символам строки
можно обращаться тем же способом, что и к элементам массива, —
с помощью квадратных скобок. В следующем примере цикл for исполь-
зуется для вывода символов имени:
var name = "Ник";