логотип PurpleSchool
  • Бесплатно
      Карта развитияОсновы разработкиCSS Flexbox
    • Новостные рассылкиИконка стрелки
    • База знанийИконка стрелки
    • Карьерные пути
      • Frontend React разработчик
      • Frontend Vue разработчик
      • Backend разработчик Node.js
      • Fullstack разработчик React / Node.js
      • Mobile разработчик React Native
      • Backend разработчик Golang
      • Devops инженер
    • О нас
      • Отзывы
      • Реферальная программа
      • О компании
      • Контакты
    • Иконка открытия меню
      • Сообщество
      • PurpleПлюс
      • AI тренажёр
      • Проекты
    логотип PurpleSchool
    ютуб иконка
    Telegram иконка
    VK иконка
    Курсы
    ГлавнаяКаталог курсовFrontendBackendFullstack
    Практика
    КарьераПроектыPurpleПлюс
    Материалы
    БлогБаза знаний
    Документы
    Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
    Реквизиты
    ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

    PurpleSchool © 2020 -2025 Все права защищены

  • Курсы
    Иконка слояПерейти в каталог курсов
    • FrontendИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • HTML и CSS
      • CSS Flexbox
      • Основы JavaScript
      • Продвинутый JavaScript
      • TypeScript с нуля
      • Neovim
    • Картинка группы React

      React


      • React и Redux Toolkit
      • Zustand
      • Next.js - с нуля
      • Feature-Sliced Design
    • Картинка группы Vue.js

      Vue.js


      • Vue 3 и Pinia
      • Nuxt
      • Feature-Sliced Design
    • Картинка группы Angular

      Angular


      • Angular 19 Иконка курсаСкоро!
    • Картинка группы Node.js

      Node.js


      • Основы Git
      • Основы JavaScript
      • Продвинутый JavaScript
      • Telegraf.js Иконка курсаСкоро!
      • TypeScript с нуля
      • Node.js с нуля
      • Nest.js с нуля
    • Картинка группы Golang

      Golang


      • Основы Git
      • Основы Golang
      • Продвинутый Golang
      • Golang - Templ Fiber HTMX
    • Картинка группы C#

      C#


      • Основы C#
    • Картинка группы Python

      Python


      • Основы Python
      • Продвинутый Python Иконка курсаСкоро!
    • Картинка группы PHP

      PHP


      • Основы PHP Иконка курсаСкоро!
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Docker и Ansible
      • Kubernetes и Helm
      • Микросервисы
      • Neovim
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • Основы Linux
      • Bash скрипты
      • Docker и Ansible
      • Kubernetes и Helm
      • Микросервисы
      • Neovim
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • Neovim
    • Картинка группы React Native

      React Native


      • HTML и CSS
      • Основы JavaScript
      • Продвинутый JavaScript
      • TypeScript с нуля
      • React и Redux Toolkit
      • React Native и Expo Router
    • Картинка группы Flutter

      Flutter


      • Основы Flutter Иконка курсаСкоро!
    • Картинка группы Swift

      Swift


      • Основы Swift и iOS
    • Картинка группы Общее

      Общее


      • Продвинутое тестирование Иконка курсаСкоро!
      • Основы тестирования ПО
    • Картинка группы Общее

      Общее


      • Собеседование
      • Современный Agile
    • Картинка группы Figma

      Figma


      • Основы дизайна
  • логотип PurpleSchool
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Циклы For и While в JavaScript

    Циклы For и While в JavaScript

    Аватар автора Циклы For и While в JavaScript

    Валерий Шестернин

    Иконка календаря08 сентября 2023

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

    Цикл for

    Синтаксис цикла for состоит из объявления инструкции for, после которой идут три необязательных выражения, заключенные в скобки и разделенные точкой с запятой: инициализация переменной, которая выступает в качестве счетчика, условие завершения работы цикла, прерывающее его выполнение когда выражение возвращает false и финальное выражение, которое изменяет переменную (счетчик) после выполнения инструкции, после которых в фигурных скобках записывается инструкция, выполняемая на каждой итерации цикла.

    for (
      let i = 0; //i - счетчик, который изначально равен 0
      i < 10; //i < 10 - условие, которое вернет false и остановит цикл, когда i будет равно 10
      i++ //i++ - финальное выражение после каждой итерации увеличивает i на единицу
    ) {
      console.log(i);
      //код, выполняемый при каждой итерации, который имеет доступ к счетчику
    }
    //в консоль будут выведены числа от 0 до 9 по одному на каждую итерацию цикла
    

    Как я уже писал выше, каждая из частей цикла необязательна. Можно пропустить инициализацию счетчика и вместо него использовать объявленую до цикла переменную финальное выражение можно перенести в блок кода, исполняемый при каждой итерации цикла и изменять счетчик там.

    let i = 0;
    //используем в цикле уже существующую переменную
    for (;i < 10;)
    //пропускаем два выражения,
    //но все равно ставим точки с запятой
    //воизбежание синтаксической ошибки
    {  console.log(i);
      i++;
      //финальное выражение переносим в блок кода
    }
    //в результате в консоли так же появятся 
    //цифры от 0 до 9
    

    Условие завершения цикла так же можно перенести в блок кода, но для остановки выполнения придется воспользоваться директивой `break`. Она позволяет остановить цикл в нужный момент и перейти к исполнению следующего участка кода. Кроме нее внутри блока можно использовать директиву `continue`, которая не прекращает выполнение цикла, но пропускает весь код в блоке.

    let i = 0;
    for (;;) //пропускаем все 3 выражения
    {
      i++;
      //перенесем финальное выражение выше
      //что бы оно не было пропущено из-за
      //директивы continue
      if (i === 3) continue;
      //если i равно 3 код не выполняется,
      //но цикл не заввершается
      if (i === 5) break;
      //если i равно 5 код не выполняется
      //и цикл заввершается
      console.log(i);
    }
    //в консоль будут выведены цифры: 1, 2, 4
    //3 будет пропущена из-за директивы continue
    //5 и выше - из-за директивы break
    

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

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

    let i = 0;
    for (;;)
    //условие завершения цикла не указано
    //ни в выражениях 
    {
      console.log(i);
      i++;
      //ни в блоке кода
    }
    //такой цикл будет бесконечным
    

    При выборе способа итерации в пользу цикла for следует помнить, что массивоподобные типы данных и объекты имеют свои циклы (`for…in` и `for…of`), а так же методы, лучше оптимизированы для перебора таких структур данных и справятся этой задачей быстрее и эффективнее. Кроме того стоит помнить о том что из-за схожести синтаксиса разных циклов следует следить за заключением логических выражений в скобки. Так, например, при определении переменной счетчика по условию с оператором in можно получить ошибку, если не заключить это условие в скобки.

    const myObl = { counter: 1 };
    for(let i = "counter" in myObl ? myObl.counter : 0 ; i < 10; i++)
    //передаем переменной i значение из свойства counter, 
    //если оно есть в объекте myObj
    {
        //какой-то блок кода
    }
    //Получим ошибку:
    //for-in loop variable declaration may not have an initializer.
    for(let i = ("counter" in myObl) ? myObl.counter : 0 ; i < 10; i++)
    //делаем то же самое, но с правильной группирорвкой выражений
    {
        //какой-то блок кода
    }
    //такой цикл будет работать как ожидается
    

    Цикл while

    Синтаксис цикла for, при указании только условия без инициализации переменной и финального выражения (`for(;условие;){}`) вполне обоснованно может показаться странным и сложночитаемым. Это связано с тем, что для подобных случаев, когда нужно указать только условие, существует отдельный цикл - while. Его синтаксис, как вы уже могли догадаться, состоит из объявления цикла, условия в скобках и блока кода, который исполняется по условию. В остальном его поведение очень похоже на for. В цикле while так же поддерживаются инструкции `break` и `continue`, а при задании условия так же стоит быть осторожным и учитывать возможность создания бесконечного цикла.

    let i = 0;
    while (i < 10) {
      i++;
      console.log(i);
    } //обычный цикл, который завершится по условию
    while (i > 10) {
      i++;
      console.log(i);
    } //здесь условие указано неверно и цикл будет бесконечным
    while (i > 10) {
      i++;
      if (i === 5) continue;
      if (i === 10) break;
      console.log(i);
    } //но это можно исправить проверками внутри блока кода
    

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

    let i;
    //у нас есть переменная, значение которой не определено
    while (i < 10) 
      //проверка undefined < 10 вернет false и цикл прекратит выполнение
      {if (!i) i = 0;
      //это часть кода не исполнится и при undefined в i 
      //переменная не получит новое значение
      console.log(i);
      i++}
    do {
      if (!i) i = 0;
      //здесь мы сначала проверяем i на определенность значения
      console.log(i);
      i++;
    } while (i < 10);
    //и уже после этого запускаем цикл
    

    Заключение

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

    Иконка глаза2 847

    Комментарии

    0

    Постройте личный план изучения Основы разработки до уровня Middle — бесплатно!

    Основы разработки — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы Git

    Антон Ларичев
    AI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажеры
    Практика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее
    Иконка чипа0