всегда выполняет тело хотя бы один раз, а проверяет условие после первого выполнения. Поэтому и тестируемое выражение записывают после тела цикла:
>do {
> var name = prompt("Who are you?");
>} while (!name);
>console.log(name);
Эта программа заставляет ввести имя. Она спрашивает его снова и снова, пока не получит что-то кроме пустой строки. Добавление ">!
" превращает значение в булевское и затем применяет логическое отрицание, а все строки, кроме пустой, преобразуются в булевское >true
.
Вы, наверно, заметили пробелы перед некоторыми инструкциями. В JavaScript это не обязательно – программа отработает и без них. Даже переводы строк не обязательно делать. Можно написать программу в одну строку. Роль пробелов в блоках – отделять их от остальной программы. В сложном коде, где в блоках встречаются другие блоки, может быть сложно разглядеть, где кончается один и начинается другой. Правильно отделяя их пробелами вы приводите в соответствие внешний вид кода и его блоки. Я люблю отделять каждый блок двумя пробелами, но вкусы различаются – некоторые используют четыре, некоторые – табуляцию. Чем больше пробелов использовать, тем заметнее отступ, но тем быстрее вложенные блоки убегают за правый край экрана.
Много циклов строятся по такому шаблону, как в примере. Создаётся переменная-счётчик, потом идёт цикл >while
, где проверочное выражение обычно проверяет, не достигли ли мы какой-нибудь границы. В конце тела цикла счётчик обновляется.
Поскольку это такой частый случай, в JavaScript есть вариант покороче, цикл >for
.
>for (var number = 0; number <= 12; number = number + 2)
> console.log(number);
>// → 0
>// → 2
>// … и т.д.
Эта программа эквивалентна предыдущей. Только теперь все инструкции, относящиеся к отслеживанию состояния цикла, сгруппированы.
Скобки после >for
содержат две точки с запятой, разделяя инструкцию на три части. Первая инициализирует цикл, обычно задавая начальное значение переменной. Вторая – выражение проверки необходимости продолжения цикла. Третья – обновляет состояние после каждого прохода. В большинстве случаев такая запись более короткая и понятная, чем >while
.
Вычисляем 2>10 при помощи >for
:
>var result = 1;
>for (var counter = 0; counter < 10; counter = counter + 1)
> result = result * 2;
>console.log(result);
>// → 1024
Хотя я не писал фигурных скобок, я отделяю тело цикла пробелами.
Дождаться, пока условие цикла не станет ложным – не единственный способ закончить цикл. Специальная инструкция >break
приводит к немедленному выходу из цикла.
В следующем примере мы покидаем цикл, когда находим число, большее 20 и делящееся на 7 без остатка.