Для циклов можно написать так!

JavaScript

предисловие

Недавно я многому научился, прочитав "Шаблоны проектирования и практика разработки JavaScript", и есть метод написания, которым мне очень интересно поделиться.

текст

Как вы, ребята, пишете цикл for?
Большинство из них так пишут.

let arr = [1, 2, 3]
for (let i = 0, len = arr.length; i < len; i++) {
  // ...
}

Далее покажите волну операций

let arr = [1, 2, 3]
for (let i = 0, val; val = arr[i++]; ) {
  // ...
}

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

С сомнениями, чтобы запросить механизм работы цикла for

for (语句 1; 语句 2; 语句 3) {
  // 被执行的代码块
}

Вы можете видеть, что нормальный цикл for состоит из 3 операторов, давайте сначала объясним это.
Оператор 1 (необязательно): используется для инициализации переменных.
Утверждение 2 (необязательно): условное суждение, если оно истинно, продолжить, если ложно, выйти из цикла
Утверждение 3 (необязательно): изменение значения исходной переменной для условного суждения

Прочитав функции этих операторов, вы можете понять, почему приведенный выше цикл может работать нормально.val = arr[i++]является условным оператором суждения (который также играет赋值а такжеi++роль), отarr[i++]Если полученное значение оценивается какtrueЗатем цикл может продолжаться, если он оценивается какfalse, цикл завершается.

расширять

долгоиграющий 😂
Какое значение выведет этот раздел?

let arr = [1, 2, 0, 3]
for (let i = 0, val; val = arr[i++]; ) {
  // ...
}

Ответ: только выход1а также2.
Причина: когдаi=2Когда вынимаемое значение0, ta будет оцениваться какfalse, поэтому он выходит из цикла.
Как решить эту ситуацию, напишите условие решения самостоятельно.

let arr = [1, 2, 0, 3]
for (let i = 0, val; ; ) {
  val = arr[i++]
  if (val === undefined) {
    break
  } else {
    // ...
  }
}

Суммировать

Механизм работы цикла for довольно ароматный.

Если вы не уверены в данных в массиве, не пишите так
Если вы не уверены в данных в массиве, не пишите так
Если вы не уверены в данных в массиве, не пишите так

Глядя на автора книги "JavaScript Design Patterns and Development Practice", полная страница для работы с циклом (очень высокая), я до сих пор восхищаюсь автором за написание такой хорошей статьи, и благодарю автора за его вклад в сообщество.

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

Как большие парни, двигайте пальцами, ставьте лайки и подписывайтесь☺