Хотите заказать веб-сайт? Связаться с нами

Циклы в JavaScript: полный гид для разработчиков

Циклы — одна из фундаментальных конструкций в программировании, позволяющая автоматизировать повторяющиеся действия. В JavaScript циклы используются для обработки массивов, объектов, генерации данных и многого другого. Понимание их работы критически важно для написания эффективного и чистого кода. В этой статье мы подробно разберем все виды циклов, их синтаксис и практическое применение.

Циклы в JavaScript: полный гид для разработчиков

Цикл while: выполнение при условии

Цикл while выполняет блок кода до тех пор, пока заданное условие истинно. Он идеально подходит для ситуаций, когда количество итераций заранее неизвестно.

Пример 1

Синтаксис цикла while.

while (condition) {
  // Код, выполняемый при истинности условия
}

Пример 2

Создание простого счетчика.

let counter = 0;
while (counter < 5) {
  console.log(`Текущее значение: ${counter}`);
  counter++;
}

Этот код выведет числа от 0 до 4. Важно следить, чтобы условие менялось внутри цикла, иначе можно столкнуться с бесконечным выполнением.

Цикл do…while: гарантированное выполнение

Цикл do…while гарантирует, что блок кода выполнится как минимум один раз, даже если условие изначально ложно. Сначала происходит выполнение, затем проверка условия.

Пример 3

Структура цикла do…while.

do {
  // Выполняемый код
} while (condition);

Пример 4

Запрос данных от пользователя.

let userInput;
do {
  userInput = prompt('Введите число больше 10:');
} while (userInput <= 10);
console.log(`Вы ввели: ${userInput}`);

Этот цикл будет запрашивать число, пока пользователь не введет значение больше 10.

Цикл for: классический перебор

Цикл for — наиболее часто используемый вариант для ситуаций с известным количеством итераций. Он объединяет инициализацию, условие и шаг в одной строке.

Пример 5

Формат записи цикла for.

for (initialization; condition; increment) {
  // Тело цикла
}

Пример 6

Создание массива четных чисел.

let evenNumbers = [];
for (let num = 0; num < 20; num += 2) {
  evenNumbers.push(num);
}
console.log(evenNumbers); // [0, 2, 4, …, 18]

Такой подход удобен для работы с последовательностями и индексами.

Вложенные циклы: работа с многомерными структурами

Вложенные циклы применяются для обработки многомерных данных, например, матриц или таблиц. Они представляют собой циклы внутри других циклов.

Пример 7

Генерация таблицы умножения.

let multiplicationTable = [];
for (let row = 1; row <= 5; row++) {
  let currentRow = [];
  for (let col = 1; col <= 5; col++) {
    currentRow.push(row * col);
  }
  multiplicationTable.push(currentRow);
}
console.table(multiplicationTable);

Каждый внешний цикл создает строку, а внутренний заполняет ее значениями.

Из ноутбука появляются летающие светящиеся экраны

Оживи свой сайт. Освой JavaScript!

Статичная верстка — это только скелет. Наш онлайн-курс "JavaScript с нуля до профи" даст твоим страницам мышцы и нервы. Научись создавать слайдеры, формы, интерактивные карты и получать данные с сервера.

От теории — к реальным скриптам в твоём портфолио.

Подробнее о курсе

Циклы и массивы: эффективная обработка данных

Циклы и массивы тесно связаны, поскольку циклы позволяют перебирать элементы массивов для их обработки, фильтрации или преобразования.

Пример 8

Используем цикл для изменения элементов массива.

let products = ['яблоко', 'груша', 'банан'];
for (let index = 0; index < products.length; index++) {
  products[index] = `Фрукт: ${products[index]}`;
}
console.log(products); // ['Фрукт: яблоко', 'Фрукт: груша', 'Фрукт: банан']

Для упрощения перебора существует цикл for…of.

Цикл for…of: перебор значений массива

Цикл for…of предназначен для итерации по значениям итерируемых объектов, таких как массивы или строки. Он упрощает чтение кода.

Пример 9

Синтаксис цикла for…of.

for (let element of iterable) {
  // Работа со значением element
}

Пример 10

Суммирование элементов массива.

let prices = [100, 200, 300];
let total = 0;
for (let price of prices) {
  total += price;
}
console.log(`Общая сумма: ${total}`); // 600

Этот цикл не позволяет напрямую изменять исходный массив, но удобен для чтения данных.

Цикл for…in: перебор свойств объекта

Цикл for…in используется для перебора перечисляемых свойств объекта. Он возвращает ключи объекта, по которым можно получить значения.

Пример 11

Работа с объектом.

let car = {
  brand: 'Toyota',
  model: 'Camry',
  year: 2022
};
for (let key in car) {
  console.log(`${key}: ${car[key]}`);
}

Вывод:

brand: Toyota
model: Camry
year: 2022

Для массивов for…in не рекомендуется, так как он перебирает индексы, а не значения, и порядок может быть нарушен.

Преобразование объекта в массив для перебора

Преобразование объекта в массив открывает возможность использовать методы массивов для работы с ключами, значениями или парами ключ-значение объекта.

Доступные методы

  1. Object.keys() — возвращает массив ключей.
  2. Object.values() — возвращает массив значений.
  3. Object.entries() — возвращает массив пар [ключ, значение].

Пример 12

Использование Object.entries().

let user = { name: 'Анна', age: 28, city: 'Москва' };
for (let [key, value] of Object.entries(user)) {
  console.log(`Свойство ${key} = ${value}`);
}

Такой подход сочетает преимущества объектов и методов массивов.

Управление выполнением: break и continue

Ключевые слова break и continue позволяют гибко управлять потоком выполнения внутри циклов.
  1. break — немедленно завершает выполнение цикла.
  2. continue — пропускает текущую итерацию и переходит к следующей.

Пример 13

Поиск первого подходящего элемента.

let numbers = [3, 7, 10, 15, 20];
for (let num of numbers) {
  if (num > 12) {
    console.log(`Первое число больше 12: ${num}`);
    break;
  }
}

А continue полезен для пропуска определенных значений:

Пример 14

for (let i = 0; i < 10; i++) {
  if (i % 2 === 0) continue;
  console.log(`Нечетное число: ${i}`);
}

Метки для break и continue: контроль вложенных циклов

Метки для break и continue позволяют управлять выполнением внешних циклов из вложенных. Метка — это идентификатор, который ставится перед циклом.

Пример 15

Работа с меткой.

outerLoop:
for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    if (i === 1 && j === 1) {
      break outerLoop;
    }
    console.log(`i=${i}, j=${j}`);
  }
}

Этот код прекратит выполнение обоих циклов, когда i и j равны 1.

Цикл forEach: метод перебора массивов

Цикл forEach представляет собой встроенный метод массивов, который выполняет указанную функцию один раз для каждого элемента. Это не классический цикл, а функциональный подход к итерации.

Пример 16

Синтаксис цикла forEach.

array.forEach(callbackFunction);

Пример 17

Вывод элементов массива.

let colors = ['красный', 'зеленый', 'синий'];
colors.forEach(function(color) {
  console.log(`Цвет: ${color}`);
});

Этот код последовательно выведет все три цвета массива. Особенность метода в том, что он всегда проходит по всем элементам массива и не может быть прерван досрочно с помощью оператора break.

Часто задаваемые вопросы о циклах в JS

Какой цикл использовать для массива?

Для перебора значений массива предпочтительнее использовать цикл for...of, так как он лаконичен и исключает ошибки с индексами. Если же нужен индекс элемента, используйте классический for цикл. Цикл for...in для массивов применять не рекомендуется.

Чем отличается while от do...while?

Основное отличие в моменте проверки условия. Цикл while проверяет условие перед каждой итерацией, поэтому код внутри может не выполниться ни разу. Цикл do...while выполняет блок кода как минимум один раз, так как проверка условия происходит после итерации.

Как остановить бесконечный цикл?

Если код выполняется в браузере, можно перезагрузить страницу. В среде разработки обычно есть кнопка остановки выполнения (Stop). Чтобы предотвратить бесконечный цикл, всегда убеждайтесь, что условие выхода из цикла (например, инкремент переменной или изменение флага) обязательно выполнится.

Можно ли использовать break и continue во вложенных циклах?

Да, но по умолчанию break и continue влияют только на текущий, вложенный цикл. Чтобы прервать выполнение внешнего цикла, необходимо использовать метки (labels) — указать имя внешнего цикла и использовать его с оператором break или continue.

Как перебрать объект с помощью цикла?

Есть три основных способа. Самый простой — цикл for...in. Для более современного и гибкого подхода преобразуйте объект в массив с помощью Object.keys(), Object.values() или Object.entries(), а затем переберите его циклом for...of.

Когда лучше использовать forEach, а не цикл for?

Метод массива forEach стоит выбрать, когда вам нужно просто выполнить операцию для каждого элемента и не требуется прерывать итерацию (break) или пропускать элементы (continue). Для более сложного управления потоком выполнения традиционные циклы (for, while) подходят лучше.

Заключение

Циклы в JavaScript — мощный инструмент для обработки данных и автоматизации задач. Выбор типа цикла зависит от конкретной ситуации:

  • while — для условий с неизвестным количеством итераций.
  • do…while — когда выполнение нужно гарантировать.
  • for — для работы с индексами и известным числом повторов.
  • for…of — для перебора значений массивов.
  • for…in — для перебора свойств объектов.

Комбинируя циклы с break, continue и метками, можно создавать эффективные и читаемые алгоритмы.

Хотите стать профессионалом в JavaScript? Запишитесь на наш интенсивный онлайн-курс «JavaScript с нуля до профи» — от теории до реальных проектов. А если нужен готовый работающий сайт — наша веб-студия создаст его для вас с применением современных технологий и лучших практик.

Теги: