#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));