JavaScript для детей — страница 18 из 48

вий в цепочке 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 = "Ник";