Это блог. Заинтересованы в подходе студентов-самоучек к изучению одного из самых мощных языков? Вам предлагается узнать.

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

  • для заявления
  • делать… в то время как оператор
  • пока оператор
  • помеченное заявление
  • оператор перерыва
  • продолжить заявление
  • для… в заявлении
  • для… заявления

для выписки

Я использовал этот больше всего. Не буду писать об этом, потому что я просто знаю это, но вот пример его использования:

for (let step = 0; step < 5; step++) {
  // Runs 5 times, with values of step 0 through 4.
  console.log("Walking east one step");
}

оператор do…while

Оператор do…while повторяется до тех пор, пока указанное условие не станет ложным. Вот как они выглядят:

do
  statement
while (condition);

statement всегда выполняется один раз перед проверкой condition.

Ооо у меня получилось. Теперь у нас могут быть правильные фрагменты кода.

Если condition равно true, инструкция выполняется снова до тех пор, пока не изменится.

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

let i = 0;
do {
  i += 1;
  console.log(i);
} while (i < 5);

оператор while

Все это мы уже видели. В их примере следует отметить, что в циклах while нет области видимости, а только в функциях (что общеизвестно, я, должно быть, просто не знал), но вот посмотрите, как это работает:

let n = 0;
let x = 0;
while (n < 3) {
  n++;
  x += n;
}

На каждой итерации цикл увеличивает n и добавляет это значение к x.

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

отмеченное заявление

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

label:
  statement

label может быть любым идентификатором JavaScript. Давайте посмотрим на помеченный оператор в действии в этом примере, где markloop идентифицирует цикл while:

markLoop: while (theMark) {
  doSomething();
}

Поэтому я был немного сбит с толку целью этого, так как подумал про себя, что вы могли бы просто создать для него функцию, если вам нужно «сослаться на это где-то еще в вашей программе». Я спросил gpt, и это заставило меня понять, что раньше у него было больше контроля над вашими циклами, поэтому вы можете сломать их, даже если у вас было 2 вложенных цикла. Вот пример:

outerLoop: for (let i = 0; i < 5; i++) {
  console.log("Outer loop:", i);
  innerLoop: for (let j = 0; j < 3; j++) {
    console.log("Inner loop:", j);
    if (i === 2 && j === 1) {
      break outerLoop;
    }
  }
}

оператор разрыва

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

продолжить утверждение

Оператор continue можно использовать для перезапуска оператора while, do-while, for или label.

  • Когда вы используете continue без метки, он завершает текущую итерацию самой внутренней охватывающей инструкции while, do-while или for и продолжает выполнение цикла со следующей итерации. Это звучит как оператор паузы, но это контрастирует с ним, так как continue не прекращает выполнение цикла полностью. В цикле while он возвращается к условию (условие — это часть, в которой цикл while решает, следует ли ему зацикливаться или нет). В цикле for он переходит к increment-expression (как часть i++ в цикле for).
  • Когда вы используете continue с меткой, она применяется к оператору цикла, указанному с этой меткой.

Очень простой синтаксис:

continue;
continue label;

Вот пример его использования. Здесь вы можете ясно видеть, что когда i === 3 цикл while пропускает оставшуюся часть своего цикла и возвращается, чтобы проверить, если i < 5:

let i = 0;
let n = 0;
while (i < 5) {
  i++;
  if (i === 3) {
    continue;
  }
  n += i;
  console.log(n);
}
//1,3,7,12

Здесь используется другой пример, немного более глубокий, и использование здесь оператора continue показывает сильную полезность для него. Вы можете видеть здесь, что continue в основном говорит: «Пожалуйста, продолжайте с этого конкретного ярлыка»:

let i = 0;
let j = 10;
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, "is odd.");
  }
  console.log("i =", i);
  console.log("j =", j);
}

для…в выписке

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

for (variable in object)
  statement

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

function dumpProps(obj, objName) {
  let result = "";
  for (const i in obj) {
    result += `${objName}.${i} = ${obj[i]}<br>`;
  }
  result += "<hr>";
  return result;
}

Много чего происходит с ‹hr›, но это не имеет значения.

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

car.make = Ford
car.model = Mustang

Массивы

В документах говорится, что, хотя это может быть заманчивым способом перебора элементов массива, оператор for...in вернет имя ваших пользовательских свойств в дополнение к числовым индексам. Таким образом, вы должны использовать традиционный цикл for с числовым индексом при переборе массивов, иначе вы получите свой собственный идентификатор, который вы сделали, вместо того, что вы действительно хотели показать.

для… заявления

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

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

const arr = [3, 5, 7];
arr.foo = "hello";

for (const i in arr) {
  console.log(i);
}
// "0" "1" "2" "foo"

for (const i of arr) {
  console.log(i);
}
// Logs: 3 5 7

Операторы for...of и for...in также могут использоваться с деструктурированием (используются для извлечения значений из массивов или объектов и присвоения их переменным кратким и элегантным способом). Например, вы можете одновременно перебирать ключи и значения объекта, используя Object.entries() :

const obj = { foo: 1, bar: 2 };

for (const [key, val] of Object.entries(obj)) {
  console.log(key, val);
}
// "foo" 1
// "bar" 2

Конец

Ух ты. Там так много всего, что нужно просто пройти и посмотреть, как в надлежащих деталях. Если я просто бегло прочитал этот идентификатор, я понятия не имею, что означает какая-либо терминология, и я сильно запутался, потому что мне требуется секунда, чтобы просто посмотреть на некоторые слова, которые они мне говорят, или на некоторые фрагменты кода. и такой: «Хорошо, я не понимаю, что они там имеют в виду», а потом я думаю об этом, и если я действительно не могу понять, я посмотрю, какова точка зрения GPT на это. Тем не менее, я рад закончить этот раздел, и перед тем, как закончить эту страницу, я собираюсь написать предложение о каждом цикле и итерации, просто чтобы убедиться, что я лучше понимаю и запоминаю.

  • для утверждения: для i = 0; я ‹ что-то.длина; я++ в значительной степени
  • оператор do…while: выполните этот код, пока это равно этому, например
  • Оператор while: в то время как True равно навсегда, если в конечном итоге это не
  • заявление с меткой: дайте вашим петлям идентификатор, чтобы вы могли их закрыть
  • оператор break: закройте свои петли
  • оператор continue: закройте циклы и перезапустите их
  • for…in: нет, вы не можете использовать их для своего массива
  • for…of: да, вы можете использовать их для своего массива