Условный оператор в цикле for прост, как я

#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 .