предисловие
Недавно я многому научился, прочитав "Шаблоны проектирования и практика разработки 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 используется в книге, данные в массиве в основном представляют собой функцию обратного вызова, поэтому нет ситуации, когда условие оценки значения данных будет ложным.
Как большие парни, двигайте пальцами, ставьте лайки и подписывайтесь☺