Как работает этот цикл?
Вот мой цикл.
for (let x = 0; x <= 5; x++) {
if (!x % 2 == 0) console.log(x);
}
В результате выводятся такие значения – 1, 2, 3, 4, 5. Не понимаю почему. Если, например взять тройку и подставить в if получится: 3 % 2 == 1. Получается единица - это true, впоследствии true переводится в false → для тройки не должно срабатывать console.log. Почему срабатывает?
Ответы (4 шт):
Так хотели
for (let x = 0; x <= 5; x++) {
if (x % 2 == 0) console.log(x);
}
Если взять единицу и подставить в иф, то получится не 1 % 2, а !1 % 2. Любое число, кроме 0 это true. Соответственно not-любоечисло это false. false это 0. Остаток от деления 0 на 2 равен 0, условие выполнено - выводим число.
Возможно, вы хотели написать не !x % 2 == 0, а !(x % 2) == 0. Или x % 2 == 0, в зависимости от того, какие числа хотите вывести - четные или нечетные.
Если расставить скобки в выражении !x % 2 == 0 с учётом приоритетов операций, то будет:
((!x) % 2) == 0
И тогда условие в if будет вычисляться так:
x !x !x%2 !x%2==0
0 true 1 false
1 false 0 true
2 false 0 true
3 false 0 true
4 false 0 true
5 false 0 true
Если при написании сложного выражения есть сомнения в приоритете операторов, то можно расставить скобки. Также на developer.mozilla.org есть большая табличка с приоритетами.
for (let x = 0; x <= 5; x++) {
if (x % 2 === 0) console.log(x);
}
Либо так для не парных чисел:
for (let x = 0; x <= 5; x++) {
if (x % 2 !== 0) console.log(x);
}