Циклы while, for
Циклы нужны для многократного повторения участка кода. Например, шагать от дома и до работы, или каждому члену семьи дать по подарку.
Цикл while - делать что-то пока не
while ( ... ) { ... }
Его более редкая разновидность
do { ... } while ( ... )
Используется если нужно сделать что-то по крайней мере один раз, а потом проверить условие
Очень часто используется цикл for
for ( var i = 0; i < str.length; i++ ) {
...
}
Здесь мы перебрали все символы строки
Предположим, нужно перебрать все символы строки, пока не дойдём до мягкого знака (если он есть)
Такой цикл будет выглядеть как
for ( var i = 0; i < str.length; i++ ) {
...
if ( str[i ]== "ь" ) break;
}
Дойдя до мягкого знака цикл остановится
Может быть вариант, когда что-то нужно сделать с каждым символом строки кроме мягкого знака.
Тогда пишем так:
for ( var i = 0; i < str.length; i++ ) {
if ( str[i] == "ь" ) continue;
...
}
Инструкции break и continue прерывают выполнение цикла. Разница в том, что break прерывает весь цикл полностью, а continue только его текущую итерацию
Задача
Какие значения будет принимать n в следующем цикле:
i = 0;
n = 0;
while (i < 5) {
i++;
if (i === 3) {
continue;
}
n += i;
}
Ответ: 1, 3, 7, 12
Метки
Предположим, что есть два цикла вложенных друг в друга. И вот ми хотим, чтобы при наступлении определённого условия во внутреннем цикле остановился и внешний цикл тоже.
Для этого используем метку.
label: for ( var i = 0; i < str.length; i++ ) {
for ( var j = 0; j < 10; j++ ) {
...
if(j = 3) continue label;
}
}
Про метки можно прочитать здесь https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/label
И там красным цветом выделена рекомендация
! Избегайте использования меток
Задача
Какие значения i выведет цикл for?
for (var i = 0; i < 5; i++) alert( i );
for (var i = 0; i < 5; ++i) alert( i );
Ответ: достаточно неожиданно, но никакой разницы в результатах этих выражений нет, независимо от постфиксной или префиксной инкрементации i будет принимать значения от 0 до 4
Пояснение к ней
Такой результат обусловлен алгоритмом работы for:
Выполнить присвоение i=0
Проверить i<5
Если верно – выполнить тело цикла alert(i), затем выполнить i++
Увеличение i++ выполняется отдельно от проверки условия (2), значение i при этом не используется, поэтому нет никакой разницы между i++ и ++i.
Задача
При помощи цикла for выведите чётные числа от 2 до 10.
Моё решение:
for (var i = 1; i <=10; i++) {
if (i % 2 == 1) continue;
alert(i);
}
Решение с сайта:
for (var i = 2; i <= 10; i++) {
if (i % 2 == 0) {
alert( i );
}
}
Моё мне нравится больше. В нём меньше скобок и ниже вложенность. Это хорошо.
Задача
Создайте код, который выводит все простые числа из интервала от 2 до 10. Результат должен быть: 2,3,5,7.
P.S. Код также должен легко модифицироваться для любых других интервалов.
Моё решение, и оно неправильное
function prime(n) {
for (var i = 2; i <= n; i++) {
for (var j = 2; j <= i; j++) {
if (i != j && i % j == 0) continue;
else alert(i);
}
}
}
prime(10)
А вот такое решение правильное
function prime(n) {
label:
for (var i = 2; i <= n; i++) {
for (var j = 2; j <= i; j++) {
if (i != j && i % j == 0) continue label;
else alert(i);
}
}
}
prime(10)
Хороший пример использования метки в цикле
Цикл while - делать что-то пока не
while ( ... ) { ... }
Его более редкая разновидность
do { ... } while ( ... )
Используется если нужно сделать что-то по крайней мере один раз, а потом проверить условие
Очень часто используется цикл for
for ( var i = 0; i < str.length; i++ ) {
...
}
Здесь мы перебрали все символы строки
Предположим, нужно перебрать все символы строки, пока не дойдём до мягкого знака (если он есть)
Такой цикл будет выглядеть как
for ( var i = 0; i < str.length; i++ ) {
...
if ( str[i ]== "ь" ) break;
}
Дойдя до мягкого знака цикл остановится
Может быть вариант, когда что-то нужно сделать с каждым символом строки кроме мягкого знака.
Тогда пишем так:
for ( var i = 0; i < str.length; i++ ) {
if ( str[i] == "ь" ) continue;
...
}
Инструкции break и continue прерывают выполнение цикла. Разница в том, что break прерывает весь цикл полностью, а continue только его текущую итерацию
Задача
Какие значения будет принимать n в следующем цикле:
i = 0;
n = 0;
while (i < 5) {
i++;
if (i === 3) {
continue;
}
n += i;
}
Ответ: 1, 3, 7, 12
Метки
Предположим, что есть два цикла вложенных друг в друга. И вот ми хотим, чтобы при наступлении определённого условия во внутреннем цикле остановился и внешний цикл тоже.
Для этого используем метку.
label: for ( var i = 0; i < str.length; i++ ) {
for ( var j = 0; j < 10; j++ ) {
...
if(j = 3) continue label;
}
}
Про метки можно прочитать здесь https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/label
И там красным цветом выделена рекомендация
! Избегайте использования меток
Задача
Какие значения i выведет цикл for?
for (var i = 0; i < 5; i++) alert( i );
for (var i = 0; i < 5; ++i) alert( i );
Ответ: достаточно неожиданно, но никакой разницы в результатах этих выражений нет, независимо от постфиксной или префиксной инкрементации i будет принимать значения от 0 до 4
Пояснение к ней
Такой результат обусловлен алгоритмом работы for:
Выполнить присвоение i=0
Проверить i<5
Если верно – выполнить тело цикла alert(i), затем выполнить i++
Увеличение i++ выполняется отдельно от проверки условия (2), значение i при этом не используется, поэтому нет никакой разницы между i++ и ++i.
Задача
При помощи цикла for выведите чётные числа от 2 до 10.
Моё решение:
for (var i = 1; i <=10; i++) {
if (i % 2 == 1) continue;
alert(i);
}
Решение с сайта:
for (var i = 2; i <= 10; i++) {
if (i % 2 == 0) {
alert( i );
}
}
Моё мне нравится больше. В нём меньше скобок и ниже вложенность. Это хорошо.
Задача
Создайте код, который выводит все простые числа из интервала от 2 до 10. Результат должен быть: 2,3,5,7.
P.S. Код также должен легко модифицироваться для любых других интервалов.
Моё решение, и оно неправильное
function prime(n) {
for (var i = 2; i <= n; i++) {
for (var j = 2; j <= i; j++) {
if (i != j && i % j == 0) continue;
else alert(i);
}
}
}
prime(10)
А вот такое решение правильное
function prime(n) {
label:
for (var i = 2; i <= n; i++) {
for (var j = 2; j <= i; j++) {
if (i != j && i % j == 0) continue label;
else alert(i);
}
}
}
prime(10)
Хороший пример использования метки в цикле