Какой цикл проверяет условие после каждой итерации
Перейти к содержимому

Какой цикл проверяет условие после каждой итерации

  • автор:

Цикл 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 и цикл прекратит выполнение do < if (!i) i = 0; //здесь мы сначала проверяем i на определенность значения console.log(i); i++; >while (i < 10); //и уже после этого запускаем цикл

Заключение

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

Операторы итерации — for , foreach , do и while

Операторы итерации многократно выполняют инструкцию или блок инструкций. Оператор for выполняет текст, пока указанное логическое выражение вычисляется true . Инструкция foreach перечисляет элементы коллекции и выполняет его текст для каждого элемента коллекции. Оператор do условно выполняет свой текст один или несколько раз. Оператор while условно выполняет его тело ноль или более раз.

В любой момент в тексте инструкции итерации можно выйти из цикла с помощью инструкции break . Вы можете перейти к следующей итерации в цикле с помощью инструкции continue .

Инструкция for

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

for (int i = 0; i < 3; i++) < Console.Write(i); >// Output: // 012 

В предыдущем примере показаны элементы оператора for :

    Раздел инициализатора, который выполняется только один раз перед входом в цикл. Как правило, в этом разделе объявляется и инициализируется локальная переменная цикла. Доступ к объявленной переменной извне оператора for невозможен. В разделе инициализатора в предыдущем примере объявляется и инициализируется целочисленная переменная-счетчик:

int i = 0 

Раздел итератора может содержать ноль или более следующих выражений оператора, разделенных запятыми:

  • префиксное или постфиксное выражение приращения, такое как ++i или i++
  • префиксное или постфиксное выражение декремента, такое как --i или i--
  • присваивание
  • вызов метода
  • Выражение await
  • создание объекта с помощью new оператора

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

int i; int j = 3; for (i = 0, Console.WriteLine($"Start: i=, j="); i < j; i++, j--, Console.WriteLine($"Step: i=, j=")) < //. >// Output: // Start: i=0, j=3 // Step: i=1, j=2 // Step: i=2, j=1 

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

Инструкция foreach

Оператор foreach выполняет оператор или блок операторов для каждого элемента в экземпляре типа, который реализует интерфейс System.Collections.IEnumerable или System.Collections.Generic.IEnumerable , как показано в следующем примере.

List fibNumbers = [0, 1, 1, 2, 3, 5, 8, 13]; foreach (int element in fibNumbers) < Console.Write($""); > // Output: // 0 1 1 2 3 5 8 13 

Оператор foreach не ограничен этими типами. Его можно использовать с экземпляром любого типа, который удовлетворяет следующим условиям:

  • Тип имеет открытый метод без параметров GetEnumerator . Этот GetEnumerator метод может быть методом расширения типа.
  • тип возвращаемого значения метода GetEnumerator должен содержать открытое свойство Current и открытый метод MoveNext без параметров с типом возвращаемого значения bool .

В следующем примере показано использование оператора foreach с экземпляром типа System.Span , который не реализует интерфейс:

Span numbers = [3, 14, 15, 92, 6]; foreach (int number in numbers) < Console.Write($""); > // Output: // 3 14 15 92 6 

Если свойство перечислителя Current возвращает возвращаемое значение ссылки ( ref T где T тип элемента коллекции), можно объявить переменную итерации с ref ref readonly модификатором, как показано в следующем примере:

Span storage = stackalloc int[10]; int num = 0; foreach (ref int item in storage) < item = num++; >foreach (ref readonly var item in storage) < Console.Write($""); > // Output: // 0 1 2 3 4 5 6 7 8 9 

Если исходная коллекция инструкции foreach пуста, тело оператора foreach не выполняется и пропускается. Если оператор foreach применяется к null , возникает исключение NullReferenceException.

await foreach

await foreach (var item in GenerateSequenceAsync())

Оператор await foreach можно также использовать с экземпляром любого типа, который удовлетворяет следующим условиям:

  • Тип имеет открытый метод без параметров GetAsyncEnumerator . Этот метод может быть методом расширения типа.
  • Тип возвращаемого значения метода GetAsyncEnumerator имеет открытое свойство Current и открытый метод без параметров MoveNextAsync , тип возвращаемого значения которого — Task , ValueTask или любой другой подтверждающий ожидание тип, метод ожидания которого GetResult возвращает значение bool .

Элементы потока по умолчанию обрабатываются в захваченном контексте. Чтобы отключить захват контекста, используйте метод расширения TaskAsyncEnumerableExtensions.ConfigureAwait. Дополнительные сведения о контекстах синхронизации и захвате текущего контекста см. в статье Использование асинхронного шаблона, основанного на задачах. Дополнительные сведения об асинхронных потоках см. в руководстве по асинхронным потокам.

Тип переменной итерации

Можно использовать ключевое слово var , чтобы компилятор мог определить тип переменной итерации в операторе foreach , как показано в следующем коде:

foreach (var item in collection)

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

Можно также явно указать тип переменной итерации, как показано в следующем коде:

IEnumerable collection = new T[5]; foreach (V item in collection)

В предыдущей форме тип T элемента коллекции должен быть неявно или явно преобразован в тип V переменной итерации. Если явное преобразование из T в V завершается ошибкой во время выполнения, оператор foreach выдает исключение InvalidCastException. Например, если T является незапечатанным типом класса, V может быть любым типом интерфейса, даже тем, который T не реализует. Во время выполнения тип элемента коллекции может быть производным от T и фактически реализовать V . В противном случае возникает InvalidCastException.

Инструкция do

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

В следующем примере показано применение оператора do .

int n = 0; do < Console.Write(n); n++; >while (n < 5); // Output: // 01234 

Инструкция while

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

В следующем примере показано применение оператора while .

int n = 0; while (n < 5) < Console.Write(n); n++; >// Output: // 01234 

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

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

  • Асинхронные потоки
  • Поддержка расширения GetEnumerator для циклов foreach

См. также

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Цикл for

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

Синтаксис for

 for (начальное выражение; условие; шаг) < // инструкция (тело цикла) > 

Начальное выражение - условие выполняется один раз при входе в цикл и обычно используется для инициализации счетчика.

Условие - проверяется при каждой итерации. Если условие true происходит запуск цикла, при false остановка.

Тело цикла - код из тела цикла выполняется при каждой итерации до тех пор пока условие true .

Шаг - выражение выполняется после исполнения кода из тела цикла при каждой итерации перед проверкой условия.

Пример №1

 for (let n = 0; n

let n = 0 - выполняется один раз при входе в цикл, переменной n задается значение 0.

n - далее проверяется условие, где n должно быть меньше 5, если это true , тогда поток выполнения кода идет дальше.

console.log(n) - после каждой итерации в console выводится значение переменной n , на первом этапе это 0.

n++ - после выполнения тела цикла n увеличивается на единицу.

Далее процесс происходит заново, до тех пор пока n не станет равна 5, тогда цикл завершится. Результатом скрипта является вывод в console цифр 0, 1, 2, 3, 4.

Пример №2

 for (let i = 1, n = 0; i

В первом выражении цикла for можно объявить несколько переменных, в этом примере это i и n , но их может быть и больше. В третьем выражении ситуация сходная с каждым шагом i и n увеличиваются на единицу, при необходимости можно добавить операции и над другими переменными.

Необязательные элементы в цикле for

Все три выражения в цикле for расположенные в круглых скобках необязательны и могут быть пропущены.

Пример №3

 let n = 0; for (; n

Такой код отработает идентично, тому, где переменная n была бы объявлена в первом выражении for , а не перед циклом.

Пример №4

 let n = 0; for (; n

В этом случае шаг был перенесен в тело цикла.

Пример №5

 let n = 0; for (; ; )

Здесь отсутствуют все три выражения и это тоже не ошибка, правда это делает цикл бесконечным. В таком случае можно предусмотреть окончание цикла с помощью директивы break.

Прерывание цикла - break

Директива break позволяет прервать цикл for в любой момент

Пример №6

 let n = 0; for (; ; ) < console.log(n++); if (n >10) break; > 

При каждой итерации в теле цикла происходит проверка if (n > 10) и когда n станет больше 10, цикл прервется.

Пример №7

 for (var n = 0; n < 8; n++) < if (n === 5) break; >alert(n); 

Здесь более наглядно можно увидеть принцип работы break . Как только n достигнет пяти, цикл прервется и в модальном окне появится результат. В свою очередь условие n будет проигнорировано.

Завершение текущей итерации - continue

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

Пример №8

 for (let n = 0; n

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

Метки для continue и break

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

Пример №9

 let n, i; cancelLoops: for (n = 0; n < 4; n++) < for (i = 0; i < 4; i++) < if (n === 3 && i === 3) < break cancelLoops; >console.log('n = ' + n + ', i = ' + i); > > 

Метка cancelLoops обозначает верхний цикл и при достижении условия (n === 3 && i === 3) команда break cancelLoops его прерывает

Пример №10

 passLoop: for (n = 0; n < 4; n++) < for (i = 0; i < 4; i++) < if (n === 2 && i === 2) < continue passLoop; >console.log('n = ' + n + ', i = ' + i); > > 

При достижении условия (n === 2 && i === 2) команда continue passLoop завершает текущую итерацию и переносит поток выполнения кода в начало верхнего цикла.

Итого

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

Skypro - научим с нуля

Циклы и итерации

Циклы - простой способ сделать какое-то действие несколько раз. Эта глава руководства JavaScript Guide познакомит вас с различными операторами доступными в JavaScript.

Вы можете представить цикл в виде компьютеризированной версии игры, где вы говорите кому-то сделать X шагов в одном направлении, затем Y шагов в другом; для примера, идея игры "Иди 5 шагов на восток" может быть выражена в виде цикла:

var step; for (step = 0; step  5; step++)  // Запускается 5 раз, с шагом от 0 до 4. console.log("Идём 1 шаг на восток"); > 

Существует множество различных видов циклов, но все они по сути делают тоже самое: повторяют какое-либо действие несколько раз (не забывайте про нулевой раз повторения, отсчёт в массиве начинается с 0). Различные по строению циклы предлагают разные способы для определения начала и окончания цикла. Для различных задач программирования существуют свои операторы цикла, с помощью которых они решаются намного проще.

Операторы предназначенные для организации циклов в JavaScript:

Цикл for

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

for ([начало]; [условие]; [шаг]) выражения

При его выполнении происходит следующее:

  1. Выполняется выражение начало , если оно указано. Это выражение обычно инициализирует один или несколько счётчиков, но синтаксис позволяет выражению быть любой сложности. Также используется для объявления переменных.
  2. Выполняется условие . Если условие истинно, то выполняются выражения . Если оно ложно, цикл for прерывается. Если же условие полностью пропущено, то оно считается истинным.
  3. Выполняются выражения . Чтобы выполнить несколько выражений, используются блок-выражение < . >для группировки выражений.
  4. Обновляется шаг , если он есть, а затем управление возвращается к шагу 2.

Пример

form name="selectForm"> p> label for="musicTypes" >Выберите некоторые жанры музыки, а затем нажмите на кнопку ниже:label > select id="musicTypes" name="musicTypes" multiple="multiple"> option selected="selected">R&Boption> option>Jazzoption> option>Bluesoption> option>New Ageoption> option>Classicaloption> option>Operaoption> select> p> p>input id="btn" type="button" value="Как много выбрано?" />p> form> script> function howMany(selectObject)  var numberSelected = 0; for (var i = 0; i  selectObject.options.length; i++)  if (selectObject.options[i].selected)  numberSelected++; > > return numberSelected; > var btn = document.getElementById("btn"); btn.addEventListener("click", function ()  alert("Выбрано элементов: " + howMany(document.selectForm.musicTypes)); >); script> 

Цикл do. while

Цикл do. while повторяется пока заданное условие истинно. Оператор do. while имеет вид:

do выражения while (условие);

выражения выполняются пока условие истинно. Чтобы использовать несколько выражений, используйте блок-выражение < . >, чтобы сгруппировать их. Если условие истинно, выражения выполнятся снова. В конце каждого прохода условие проверяется. Если условие ложно, выполнение приостанавливается и управление передаётся выражению после do. while .

Пример

В следующем примере, цикл do выполнится минимум 1 раз и запускается снова, пока i меньше 5.

do  i += 1; console.log(i); > while (i  5); 

Цикл while

Цикл while выполняет выражения пока условие истинно. Выглядит он так:

while (условие) выражения

Если условие становится ложным, выражения в цикле перестают выполняться и управление переходит к выражению после цикла.

Условие проверяется на истинность до того, как выполняются выражения в цикле. Если условие истинно, выполняются выражения , а затем условие проверяется снова. Если условие ложно, выполнение приостанавливается и управление переходит к выражению после while .

Чтобы использовать несколько выражений, используйте блок выражение < . >, чтобы сгруппировать их.

Пример 1

Следующий цикл while работает, пока n меньше трёх:

var n = 0; var x = 0; while (n  3)  n++; x += n; > 

С каждой итерацией, цикл увеличивает n и добавляет это значение к x . Поэтому, x и n получают следующие значения:

  • После первого прохода: n = 1 и x = 1
  • После второго: n = 2 и x = 3
  • После третьего прохода: n = 3 и x = 6

Пример 2

Избегайте бесконечных циклов. Убедитесь, что условие цикла в итоге станет ложным; иначе, цикл никогда не прервётся. Выражения в следующем цикле while будут выполняться вечно, т.к. условие никогда не станет ложным:

while (true)  console.log("Hello, world"); > 

Метка (label)

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

Синтаксис метки следующий:

метка : оператор

Значение метки может быть любым корректным JavaScript идентификатором, не являющимся зарезервированным словом. Оператор , указанный вами после метки может быть любым выражением.

Пример

В этом примере, метка markLoop обозначает цикл while .

markLoop: while (theMark == true)  doSomething(); > 

break

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

  • Когда вы используете break без метки, он прерывает циклы while , do-while и for или сразу переключает управление к следующему выражению.
  • Когда вы используете break с меткой, он прерывает специально отмеченное выражение.

Синтаксис оператора может быть таким:

Первая форма синтаксиса прерывает цикл совсем или переключает управление; вторая прерывает специально обозначенное выражение.

Пример 1

Следующий пример проходит по элементам в массиве, пока не найдёт элемент, чьё значение - theValue :

for (i = 0; i  a.length; i++)  if (a[i] == theValue)  break; > > 

Пример 2: Прерывание метки

var x = 0; var z = 0; labelCancelLoops: while (true)  console.log("Внешний цикл: " + x); x += 1; z = 1; while (true)  console.log("Внутренний цикл: " + z); z += 1; if (z === 10 && x === 10)  break labelCancelLoops; > else if (z === 10)  break; > > > 

continue

Оператор continue используется, чтобы шагнуть на шаг вперёд в циклах while , do-while , for или перейти к метке.

  • Когда вы используете continue без метки, он прерывает текущую итерацию циклов while , do-while и for и продолжает выполнение цикла со следующей итерации. В отличие от break , continue не прерывает выполнение цикла полностью. В цикле while он прыгает к условию. А в for увеличивает шаг .
  • Когда вы используете continue с меткой, он применяется к циклу с этой меткой.

Синтаксис continue может выглядеть так:

  1. continue;
  2. continue Метка ;

Пример 1

Следующий пример показывает цикл while с оператором continue , который срабатывает, когда значение i равно 3. Таким образом, n получает значения 1, 3, 7 и 12.

var i = 0; var n = 0; while (i  5)  i++; if (i == 3)  continue; > n += i; > 

Пример 2

Выражение, отмеченное checkiandj содержит выражение отмеченное checkj . При встрече с continue , программа прерывает текущую итерацию checkj и начинает следующую итерацию. Каждый раз при встрече с continue , checkj переходит на следующую итерацию, пока условие возвращает false . Когда возвращается false , после вычисления остатка от деления checkiandj , checkiandj переходит на следующую итерацию, пока его условие возвращает false . Когда возвращается false , программа продолжает выполнение с выражения после checkiandj .

Если у continue проставлена метка checkiandj , программа может продолжиться с начала метки checkiandj .

checkiandj: while (i  4)  console.log(i); i += 1; checkj: while (j > 4)  console.log(j); j -= 1; if (j % 2 != 0)  continue checkj; > console.log(j + " чётное."); > console.log("i token operator">+ i); console.log("j token operator">+ j); > 

for. in

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

for (variable in object)

Пример

Следующая функция берёт своим аргументом объект и его имя. Затем проходит по всем свойствам объекта и возвращает строку, которая содержит имена свойств и их значения.

function dump_props(obj, obj_name)  var result = ""; for (var i in obj)  result += obj_name + "." + i + " token operator">+ obj[i] + "
"
; > result += "
"
; return result; >

Для объекта car со свойствами make и model , результатом будет:

.make = Ford; car.model = Mustang; 

Пример №2

Также, по ключу можно выводить значение:

let obj = for (key in obj) < console.log(`$= $`); > // model = AUDI A8 // year = 2019 // color = brown

Массивы

Хотя, очень заманчиво использовать for. in как способ пройтись по всем элементам Array , этот оператор возвращает имя свойств определённых пользователем помимо числовых индексов. Таким образом лучше использовать стандартный for для числовых индексов при взаимодействии с массивами, поскольку оператор for. in проходит по определённым пользователем свойствам в дополнение к элементам массива, если вы изменяете массив, например, добавляете свойства и методы.

let arr = ["AUDI A8", "2019", "brown"]; arr.cost = "$100.000"; for (key in arr)  console.log(`$key> = $arr[key]>`); > // 0 = AUDI A8 // 1 = 2019 // 2 = brown // cost = $100.000 

for. of

Оператор for. of создаёт цикл, проходящий по перечислимым объектам (en-US) (включая Array , Map (en-US), Set , объект arguments (en-US) и так далее), вызывая на каждой итерации функцию с выражениями, которые надо выполнить для получения значения каждого отдельного свойства.

for (variable of object)

Следующий пример показывает разницу между циклами for. of и for. in . Тогда как for. in проходит по именам свойств, for. of проходит по значениям свойств:

let arr = [3, 5, 7]; arr.foo = "hello"; for (let i in arr)  console.log(i); // выводит "0", "1", "2", "foo" > for (let i of arr)  console.log(i); // выводит "3", "5", "7" > 
  • « Предыдущая статья
  • Следующая статья »

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 3 янв. 2024 г. by MDN contributors.

Your blueprint for a better internet.

  • MDN on Mastodon
  • MDN on X (formerly Twitter)
  • MDN on GitHub
  • MDN Blog RSS Feed

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *