Javascript для цикла с несколькими условиями не работает

#javascript

#javascript

Вопрос:

Я хотел написать приведенный ниже код с циклом For, имеющим несколько условий, но это не сработало. Пожалуйста, укажите на ошибку, которую я допустил.

 // Working as expected
bs = [false, true, false];
for (let i = 0; i < 3; i  ) {
  if (bs[i]) {
    console.log('Hi', i);
  }
} 

Код, который работает не так, как ожидалось

 // Not working as expected
bs = [false, true, false];
for (let i = 0; i < 3 amp;amp; bs[i]; i  ) {
  console.log('Hi', i);
} 

Ответ №1:

Второй цикл for останавливается в тот момент, когда его условие принимает значение false. Это не значит, что он пропускает значение false.

Начиная с первого значения в массиве in false , цикл for не запускает свое тело ни разу.

Ответ №2:

Выглядит нормально! Второй параметр цикла for сообщает интерпретатору о том, когда следует остановить цикл. В первом цикле for цикл продолжается до тех пор, пока i не достигнет 3, в то время как во втором цикле цикл немедленно прерывается, поскольку первое условие возвращает false и указывает интерпретатору на остановку.

Ответ №3:

Весь цикл for завершается, поскольку условие выхода вычисляется false из-за i < 3 amp;amp; bs[i] выражения. Таким образом, на самой первой итерации цикл видит false значение в массиве и завершает работу как i < 3 amp;amp; bs[i] есть false , поэтому ничего не печатается.

Невозможно пропустить итерацию при проверке выхода в цикле for, вы можете либо использовать if в соответствии с вашим первым фрагментом и условно распечатать, либо использовать continue для пропуска итерации в зависимости от значения, которое вы получаете из предоставленного массива:

 const bs = [false, true, false];
for (let i = 0; i < 3; i  ) {
  if(bs[i] === false){
     //skips this iteration
     continue;
  }
  console.log('Hi', i);
} 

Вы также можете использовать forEach метод массива:

 const bs = [false, true, false];

bs.forEach((o,i) => o !== false amp;amp; console.log("Hi", i));