#javascript #for-loop #conditional-statements
#javascript #for-цикл #условные операторы
Вопрос:
Я нашел эти строки кода в библиотеке, созданной для прослушивания событий касания :
for ( var i = elements.length; i; i-- ) {
iterator( elements[ i - 1 ], elements );
}
На секунду это меня удивило. Я понимаю код следующим образом: i — целое положительное или нулевое число, а условный оператор — if i positive .
Я правильно понимаю? Возвращаю ли я false, когда i==-1 ? Или я что-то пропустил (например, можно написать цикл for без условного оператора)?
Комментарии:
1. Это просто обратный
for
цикл, и он очень распространен в живых списках узлов, чтобы избежать проблем при изменении списка узлов. В противном случае вы, кажется, поняли это, и должно быть тривиально войтиi
в цикл и посмотреть, когда он остановится.
Ответ №1:
Условное выражение по сути if( i) proceedToNextIteration();
По мере продвижения чисел только ноль является ложным и не пройдет проверку. -1
было бы истинным в приведенном выше условии.
По этой причине я бы переписал этот код как:
for( var i = elements.length-1; i >= 0; i--) {
iterator( elements[i], elements);
}
В нем гораздо более четко указано его конечное условие.
Комментарии:
1. Да, но это примерно на 5 символов больше , если включить пробелы. Это очень много значит!!
2. На мой взгляд, это совершенно не обязательно и не так легко читается, когда итерация списка узлов и использование
i--
его невозможно привести к чему-либо, кроме нуля. Я бы написал этоfor ( var i=elements.length; i--; ) {...
3. Очень четко, теперь я понимаю, как работает этот код. Можно ли использовать опубликованный мной код с любым циклом for или он работает только со списком узлов?
4. Хороший ответ, он мне помог! Вы получаете галочку с принятым ответом!
Ответ №2:
Это структура for
оператора в Javascript:
for ([initialization]; [condition]; [final-expression])
statement
Оператор, который вы предоставили
( var i = elements .длина; i; i— )
придерживается этого синтаксиса. Это то же самое, что
for(var i = 10; i!=0; i--)
Имеется в виду цикл от 10
( elements.length
) до 1
. Аналогично циклическому переходу от 1
к 10
.
В Javascript условие i != 0
может быть заменено на just i
.
Значение:
if(i != 0)
и
if (i)
одинаковы. Это то, что делается в части условия.
Перебор элементов списка или массива от max до 0 полезен при удалении из него элементов.
Комментарии:
1. Чтобы быть точным, условие
i != 0
— нетi>0
.2. Хороший ответ. Кроме того, можем ли мы получить true или false из целого числа без использования оператора if (например: if(i){j=true}else{j=false})?
3. @EtienneWan ты можешь.
j = !!i
. Но использование явного условного выражения делает его более читаемым:if
как вы опубликовали, или условный оператор :j = i? true : false
.