В JavaScript мы используем циклы, когда нам нужен простой способ справиться с повторением. В этой статье мы рассмотрим все способы создания циклов в нашем коде, а также рассмотрим плюсы и минусы каждого метода.
🤓 Хотите быть в курсе новостей веб-разработчиков?
🚀 Хотите, чтобы последние новости доставлялись прямо на ваш почтовый ящик?
🎉 Присоединяйтесь к растущему сообществу дизайнеров и разработчиков!
Подпишитесь на мою рассылку здесь → https://easeout.eo.page
Можно подумать о цикле, если подумать о том, чтобы давать команды роботу. Вы можете сказать ему сделать 10 шагов - и вместо того, чтобы выдавать 10 отдельных команд, мы можем создать цикл:
let
i; for
(i = 0; i < 10; i++) { document.write("Take one step!\n"); }
Это пример цикла for
. Сначала это может сбивать с толку, но мы разберем все это в следующем разделе! В этой статье мы рассмотрим множество различных типов операторов цикла, например: for
, do...while
, while
, labeled statement
, break statement
, continue statement
, for...in
& for...of
. Стоит отметить, что, несмотря на различия в синтаксисе, все циклы, по сути, делают одно и то же: повторяют действие несколько раз. Ситуация диктует, какой тип петли лучше всего подходит.
the for
петля
Как мы видели в приведенном выше примере, цикл for
будет повторяться до тех пор, пока наше условие не станет ложным. Логическая структура такая:
for ([initialExpression]; [condition]; [incrementExpression]) statement
Сначала мы инициализируем initialExpression
, который обычно инициализирует один или несколько счетчиков циклов, но синтаксис позволяет даже более сложные выражения, такие как переменные. Затем мы оцениваем наш condition
, если истина, операторы цикла будут выполнены. Если false, цикл завершается.
Затем выполняется statement
. Когда мы хотим выполнить несколько операторов, мы используем оператор блока ({ ... }
), чтобы сгруппировать их вместе. Если присутствует, выполняется выражение обновления incrementExpression
. Затем управление возвращается к оценке condition
.
Вернемся к нашему предыдущему примеру:
let
i; for
(i = 0; i < 10; i++) { document.write("Take one step!\n"); }
Здесь мы видим, что наш for
оператор подсчитывает количество сделанных шагов до 10. Переменная i
гарантирует, что мы начинаем с самого начала, инициализируя нулевое значение. Затем он проверит, что i
меньше указанного числа, которое в нашем случае равно 10. i++
- это счетчик, который будет увеличиваться i
на 1 после каждого прохождения цикла. Итак, наш цикл знает, когда нужно завершить!
do...while
заявление
Заявление do...while
будет повторяться до тех пор, пока условие не станет ложным. Структура такая:
do statement while (condition);
Это говорит само за себя: statement
всегда выполняется один раз перед проверкой условия. И затем снова, пока условие while не вернет false. Мы можем выполнять несколько операторов, используя оператор блока ({ ... }
) для их группировки. Если condition
истина, инструкция выполняется снова. В конце каждого выполнения условие проверяется. Когда условие возвращает false, выполнение останавливается и управление переходит к инструкции, следующей за do...while
.
Давайте посмотрим на пример:
let i = 0;
do {
i += 1;
console.log(i);
} while (i < 10);
Здесь наш do
цикл повторяется хотя бы один раз, а затем повторяется до тех пор, пока i
не станет больше 10.
while
заявление
Оператор while
выполняет свои операторы, пока заданное условие имеет значение true. Его синтаксис следующий:
while (condition) statement
Если условие становится ложным, statement
внутри цикла перестает выполняться, и управление затем переходит к инструкции, следующей за циклом.
Проверка условия выполняется до того, как statement
в цикле будет выполнен. И если условие возвращает true, statement
выполняется, и условие снова проверяется. Если условие возвращает false, выполнение останавливается и управление передается оператору, следующему за while
.
Как и в случае с do...while
, мы можем выполнять несколько операторов, используя оператор блока ({…}), чтобы сгруппировать их вместе.
Следующий цикл while
будет повторяться, пока a
меньше трех:
let a = 0; let b = 0;
while (a < 3) { a++; b+= a; }
Здесь с каждой итерацией цикл увеличивает a
и добавляет это значение к b
. Следовательно, a
и b
принимают следующие значения:
- После первого прохождения цикла:
a
= 1 иb
= 1 - И второй проход:
a
= 2 иb
= 3 - И третий проход:
a
= 3 иb
= 6
После завершения третьего прохода условие a < 3
перестает быть истинным, и на этом наш цикл завершается!
Примечание. Когда вы впервые начинаете работать с циклами, вы можете случайно создать бесконечный цикл. Это когда условие цикла никогда не оценивается как false. Операторы в следующем while
цикле выполняются вечно, потому что условие никогда не бывает ложным:
while (true) {
console.log('Hi there!');
}
ВНИМАНИЕ: Если вы запустите этот код - имейте в виду, что это может привести к сбою вашего браузера! Поэтому убедитесь, что вы создали резервные копии открытых вкладок - если хотите увидеть, что произойдет.
labeled
заявление
Вы можете прикрепить label
к любому оператору, чтобы он служил идентификатором, чтобы вы могли ссылаться на него в другом месте вашей программы. Например, вы можете использовать метку для обозначения цикла, а затем использовать операторы break
или continue
, чтобы указать, должна ли программа прервать цикл или продолжить его выполнение (мы рассмотрим их ниже).
label : statement
Значение label
может быть любым (за исключением зарезервированного слова JavaScript). Затем вы предоставляете thestatement
для выполнения.
Так, например, вы можете использовать метку totalLoop
для обозначения while
цикла.
totalLoop:
while (total == true) {
doSomething();
}
break
заявление
Мы используем оператор break
для завершения цикла или switch
, или вместе с помеченным оператором.
- Когда вы используете
break
без метки, он немедленно завершает внутренний охватwhile
,do-while
,for
илиswitch
и передает управление следующему оператору. - Когда вы используете
break
с меткой, он завершает указанный помеченный оператор.
Оператор break
выглядит так:
break [label];
Например, давайте пройдемся по массиву, пока не найдем индекс элемента со значением: foundMe
for (let i = 0; i < a.length; i++) {
if (a[i] == foundMe) {
break;
}
}
И давайте использовать break с помеченным утверждением:
let x = 0;
let z = 0;
endLoops: while (true) {
console.log('Outer loops: ' + x);
x += 1;
z = 1;
while (true) {
console.log('Inner loops: ' + z);
z += 1;
if (z === 10 && x === 10) {
break endLoops;
} else if (z === 10) {
break;
}
}
}
continue
заявление
Мы используем оператор continue
для перезапуска оператора while
, do-while
, for
или label
.
- Когда вы используете
continue
без метки, он завершает текущую итерацию самого внутреннего включающего оператораwhile
,do-while
илиfor
и продолжает выполнение цикла со следующей итерации. Это контрастирует с операторомbreak
, посколькуcontinue
не завершает выполнение цикла полностью. В циклеwhile
он возвращается к условию. В циклеfor
он переходит кinitial-expression
. - Когда вы используете
continue
с меткой, он применяется к оператору цикла, идентифицированному с этой меткой.
Выражение continue
выглядит так:
continue [label];
Например, в следующем блоке кода показан цикл while
с оператором continue
, который будет выполняться, когда значение i
равно трем. Итак, n
принимает значения один, три, семь и двенадцать.
let i = 0; let n = 0;
while (i < 5) { i++; if (i == 3) { continue; } n += i; console.log(n); }
// 1,3,7,12
let i = 0; let n = 0;
while (i < 5) { i++; if (i == 3) { // continue; } n += i; console.log(n); }
// 1,3,6,10,15
for...in
заявление
Оператор for...in
выполняет итерацию указанной переменной по всем перечислимым свойствам объекта. Для каждого отдельного свойства JavaScript выполняет указанные операторы. Синтаксис следующий:
for (variable in object) { statements }
Следующая функция принимает в качестве аргумента объект и имя объекта. Затем он перебирает все свойства объекта и возвращает строку, в которой перечислены имена свойств и их значения.
function get_names(obj, obj_name) {
let result = '';
for (let i in obj) {
result += obj_name + '.' + i + ' = ' + obj[i] + '<br>';
}
result += '<hr>';
return result;
}
Для объекта food
со свойствами lunch
и dinner
result
будет:
food.lunch = Sandwich
food.dinner = Lasagna
Примечание. Учитывая, что for...in
создан для итерации свойств объекта, его не рекомендуется использовать с массивами - там, где важен порядок индекса. Для массивов лучше использовать более традиционный цикл for
.
for...of
заявление
Оператор for … of
создает цикл, который перебирает итерируемые объекты, такие как Array
, Map
, Set
, arguments
и т. Д. Синтаксис такой:
for (variable of object) { statement }
В приведенном ниже примере показана разница между циклом for...of
и циклом for … in
. В то время как for...in
перебирает имена свойств, for...of
перебирает значения свойств:
let arr = [10, 20, 30]; arr.greet = 'hello';
for (let i in arr) { console.log(i); // logs "0", "1", "2", "greet" }
for (let i of arr) { console.log(i); // logs 10, 20, 30 }
Готовы ли вы вывести свои навыки CSS на новый уровень? Начните прямо сейчас с моей новой электронной книги: Руководство по CSS: полное руководство по современному CSS. Будьте в курсе всего, от основных концепций, таких как Flexbox и Grid, до более сложных тем, таких как анимация, архитектура и многое другое !!
Заключение
Вот и все! Мы узнали о многих различных операторах цикла, например: for
, do...while
, while
, labeled statement
, break statement
, continue statement
, for..in
& for...of
. И мы рассмотрели ряд примеров, выделяющих идеальные варианты использования для каждого типа цикла. Какие бы утверждения мы ни выбрали, теперь у нас есть все необходимое, чтобы добавить логику и аргументы в наши программы.
Надеюсь, эта статья оказалась для вас полезной! Вы можете подписаться на меня на Medium. Я тоже в Твиттере. Не стесняйтесь оставлять любые вопросы в комментариях ниже. Буду рад помочь!