чем отличаются циклы while и do while в js
Циклы. While, do while, for, чем отличаются?
Простой 7 комментариев
Прошу объяснить понятными определениями..
While — сначала проверь, потом сделай, и так по кругу.
Do — сначала сделай, потом проверь, и так по кругу.
Отличаются они только случаем, когда условие не выполняется: while не пройдёт, а do пройдёт один раз.
Циклы for, foreach и прочие — это разновидность цикла while (не do!!), сделанная для специального сценария: пройти некий набор объектов.
Слишком очевидный ответ, если посмотреть на примеры: www.php.su/learnphp/cs/?cycles
Вообще, эти три цикла взаимозаменяемы, т.е. если есть программа, написана с помощью одного из них, то она всегда может быть переписана с помощью любого другого. Но по правилам хорошего стиля и для удобства рекомендации следующие:
for используется, когда число итераций известно (есть переменная или константа, которая определяет это количество).
while и do-while используются, когда число итераций заранее неизвестно.
while используется, когда существует возможность, что цикл не выполнится ни разу, а do-while следует использовать, если известно, что как минимум одна итерация всегда требуется.
for. Чаще всего этот оператор описывает цикл с фиксированным количеством повторений. Вот так он может выглядеть, например, для php:
Циклы и итерации
Вы можете представить цикл в виде компьютеризированной версии игры, где вы говорите кому-то сделать X шагов в одном направлении, затем Y шагов в другом; для примера, идея игры «Иди 5 шагов на восток» может быть выражена в виде цикла:
Существует множество различных видов циклов, но все они по сути делают тоже самое: повторяют какое-либо действие несколько раз (не забывайте про нулевой раз повторения, отсчёт в массиве начинается с 0). Различные по строению циклы предлагают разные способы для определения начала и окончания цикла. Для различных задач программирования существуют свои операторы цикла, с помощью которых они решаются намного проще.
Операторы предназначенные для организации циклов в JavaScript:
Цикл for
Цикл for повторяет действия, пока не произойдёт какое-либо специальное событие завершения цикла. Оператор for в JavaScript аналогичен оператору for в Java и C. Объявление оператора for выглядит следующим образом:
При его выполнении происходит следующее:
Пример
Цикл do. while
Цикл do. while повторяется пока заданное условие истинно. Оператор do. while имеет вид:
Пример
В следующем примере, цикл do выполнится минимум 1 раз и запускается снова, пока i меньше 5.
Цикл while
Цикл while выполняет выражения пока условие истинно. Выглядит он так:
Если условие становится ложным, выражения в цикле перестают выполняться и управление переходит к выражению после цикла.
Пример 1
Следующий цикл while работает, пока n меньше трёх:
После третьего прохода, условие n становится ложным, поэтому цикл прерывается.
Пример 2
Избегайте бесконечных циклов. Убедитесь, что условие цикла в итоге станет ложным; иначе, цикл никогда не прервётся. Выражения в следующем цикле while будут выполняться вечно, т.к. условие никогда не станет ложным:
Метка (label)
Синтаксис метки следующий:
Значение метки может быть любым корректным JavaScript идентификатором, не являющимся зарезервированным словом. Оператор , указанный вами после метки может быть любым выражением.
Пример
break
Синтаксис оператора может быть таким:
Первая форма синтаксиса прерывает цикл совсем или переключает управление; вторая прерывает специально обозначенное выражение.
Пример 1
Пример 2: Прерывание метки
continue
Синтаксис continue может выглядеть так:
Пример 1
Пример 2
for. in
Оператор for. in проходит по всем перечислимым свойствам объекта. JavaScript выполнит указанные выражения для каждого отдельного свойства. Цикл for. in выглядит так:
Пример
Следующая функция берёт своим аргументом объект и его имя. Затем проходит по всем свойствам объекта и возвращает строку, которая содержит имена свойств и их значения.
Пример №2
Также, по ключу можно выводить значение:
Массивы
Пример
for. of
Циклы while и for
При написании скриптов зачастую встаёт задача сделать однотипное действие много раз.
Например, вывести товары из списка один за другим. Или просто перебрать все числа от 1 до 10 и для каждого выполнить одинаковый код.
Для многократного повторения одного участка кода предусмотрены циклы.
Цикл «while»
Цикл while имеет следующий синтаксис:
Код из тела цикла выполняется, пока условие condition истинно.
Одно выполнение тела цикла по-научному называется итерация. Цикл в примере выше совершает три итерации.
Если бы строка i++ отсутствовала в примере выше, то цикл бы повторялся (в теории) вечно. На практике, конечно, браузер не позволит такому случиться, он предоставит пользователю возможность остановить «подвисший» скрипт, а JavaScript на стороне сервера придётся «убить» процесс.
Любое выражение или переменная может быть условием цикла, а не только сравнение: условие while вычисляется и преобразуется в логическое значение.
Если тело цикла состоит лишь из одной инструкции, мы можем опустить фигурные скобки <…>:
Цикл «do…while»
Проверку условия можно разместить под телом цикла, используя специальный синтаксис do..while :
Такая форма синтаксиса оправдана, если вы хотите, чтобы тело цикла выполнилось хотя бы один раз, даже если условие окажется ложным. На практике чаще используется форма с предусловием: while(…) <…>.
Цикл «for»
Давайте разберёмся, что означает каждая часть, на примере. Цикл ниже выполняет alert(i) для i от 0 до (но не включая) 3 :
Рассмотрим конструкцию for подробней:
В целом, алгоритм работы цикла выглядит следующим образом:
То есть, начало выполняется один раз, а затем каждая итерация заключается в проверке условия, после которой выполняется тело и шаг.
Если тема циклов для вас нова, может быть полезным вернуться к примеру выше и воспроизвести его работу на листе бумаги, шаг за шагом.
Вот в точности то, что происходит в нашем случае:
В примере переменная счётчика i была объявлена прямо в цикле. Это так называемое «встроенное» объявление переменной. Такие переменные существуют только внутри цикла.
Вместо объявления новой переменной мы можем использовать уже существующую:
Пропуск частей «for»
Любая часть for может быть пропущена.
Для примера, мы можем пропустить начало если нам ничего не нужно делать перед стартом цикла.
Можно убрать и шаг :
А можно и вообще убрать всё, получив бесконечный цикл:
При этом сами точки с запятой ; обязательно должны присутствовать, иначе будет ошибка синтаксиса.
Прерывание цикла: «break»
Например, следующий код подсчитывает сумму вводимых чисел до тех пор, пока посетитель их вводит, а затем – выдаёт:
Вообще, сочетание «бесконечный цикл + break » – отличная штука для тех ситуаций, когда условие, по которому нужно прерваться, находится не в начале или конце цикла, а посередине.
Переход к следующей итерации: continue
Её используют, если понятно, что на текущем повторе цикла делать больше нечего.
Цикл, который обрабатывает только нечётные значения, мог бы выглядеть так:
Например, если мы возьмём этот код:
…и перепишем его, используя вопросительный знак:
…то будет синтаксическая ошибка.
Метки для break/continue
Бывает, нужно выйти одновременно из нескольких уровней цикла сразу.
Нам нужен способ остановить выполнение если пользователь отменит ввод.
Обычный break после input лишь прервёт внутренний цикл, но этого недостаточно. Достичь желаемого поведения можно с помощью меток.
Метка имеет вид идентификатора с двоеточием перед циклом:
Вызов break в цикле ниже ищет ближайший внешний цикл с такой меткой и переходит в его конец.
Можно размещать метку на отдельной строке:
Директива continue также может быть использована с меткой. В этом случае управление перейдёт на следующую итерацию цикла с меткой.
Метки не дают возможности передавать управление в произвольное место кода.
Например, нет возможности сделать следующее:
Вызов break/continue возможен только внутри цикла, и метка должна находиться где-то выше этой директивы.
Итого
Мы рассмотрели 3 вида циклов:
Обе этих директивы поддерживают метки, которые ставятся перед циклом. Метки – единственный способ для break/continue выйти за пределы текущего цикла, повлиять на выполнение внешнего.
Заметим, что метки не позволяют прыгнуть в произвольное место кода, в JavaScript нет такой возможности.
Циклы while и do…while в JavaScript
Дата публикации: 2016-08-25
От автора: циклы while и do…while используют реже, чем for, но они намного лучше подходят в определенных ситуациях, что делает их незаменимыми в JavaScript.
Из цикла можно выйти при помощи ключевого слова break. Цикл for всегда пройдет столько итераций, сколько вы задали: если вы скажите циклу for пройти n итераций, он это сделает. Другое дело циклы while и do…while. Эти циклы выполняют столько итераций, сколько потребуется для выполнения условия.
Цикл do-while
Цикл do…while используется в том случае, если нужно выполнить хотя бы одну итерацию, и вы не знаете количество повторений. Структура цикла:
JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Циклы do…while всегда выполняются хотя бы один раз (в отличие от циклов while, которые могут вовсе не сработать). Другими словами, цикл do…while всегда пройдет одну итерацию, а затем проверит условие.
Хороший пример – увеличение переменной с помощью случайного числа до определенного максимума. Этот метод я буду использовать в моей простой HTML5 игре в canvas.
Мне нужно было разбить круг на секторы в игре, как на круговой диаграмме. Но я не хотел, чтобы секторы были одинаковые: секторы должны были быть в пределах от минимального до максимального углов. Секторы в сумме должны были составлять 360 градусов. Другими словами, я не узнаю, сколько раз нужно запустить цикл, пока не запущу его. Но я знаю, что цикл запустится хотя бы раз, и это делает цикл do…while отличным кандидатом в этом примере. Упрощенная версия кода игры:
3.3. Циклы JavaScript
Циклы JavaScript обеспечивают многократное выполнение повторяющихся вычислений. Они оптимизируют процесс написания кода, выполняя одну и ту же инструкцию или блок инструкций, образующих тело цикла, заданное число раз (используя переменную-счётчик) или пока заданное условие истинно. Циклы выполняют обход последовательности значений. Однократное выполнение цикла называется итерацией.
На производительность цикла влияют количество итераций и количество операций, выполняемых в теле цикла каждой итерации.
В JavaScript существуют следующие операторы цикла:
Типы циклов в JavaScript, управление циклом
1. Цикл for
Следующий цикл выведет на консоль строчку Hello, JavaScript! пять раз.
Рис. 1. Результат выполнения цикла for на консоли
1.1. Как работает цикл for
Цикл for состоит из трёх разных операций:
Шаг 3. завершающая операция i++ — операция приращения счётчика, увеличивает значение переменной var i на единицу. Вместо операции инкремента также может использоваться операция декремента.
1.2. Вывод значений массива
Приведённый ниже скрипт выведет на экран пять сообщений с названиями цветов:
Если значение свойства length не изменяется в ходе выполнения цикла, можно сохранить его в локальной переменной, а затем использовать эту переменную в условном выражении. Таким образом можно повысить скорость выполнения цикла, так как значение свойства length будет извлекаться всего один раз за всё время работы цикла.
2. Цикл for. in
Для примера создадим объект с помощью литерала объекта.
Рис. 2. Результат выполнения цикла for. in на консоли
Так как цепочка наследования прототипа постоянно проверяется интерпретатором, то все объекты автоматически получают доступ к новому методу.
Рис. 3. Результат повторного выполнения цикла for. in на консоли
3. Цикл while
Данный цикл выведет на экран таблицу умножения для числа 3:
Рис. 5. Результат выполнения цикла while
4. Цикл do. while
Рис. 6. Результат выполнения цикла do. while
В следующем примере операторы внутри цикла выполняются один раз, даже если условие не выполняется.
5. Бесконечные циклы
6. Вложенные циклы
Рис. 7. Результат выполнения вложенного цикла for
7. Управление циклом
7.1. Оператор break;
Рис. 8. Результат работы оператора break в цикле for
7.2. Оператор continue;
Оператор continue; останавливает текущую итерацию цикла и запускает новую итерацию. При этом, цикл while возвращается непосредственно к своему условию, а цикл for сначала вычисляет выражение инкремента, а затем возвращается к условию.
В этом примере на экран будут выведены все чётные числа:
Рис. 9. Результат работы оператора continue в цикле for
Оператор continue; также может применяться во вложенных циклах с меткой.
Рис. 10. Результат работы оператора continue с меткой