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