Сколько раз выполнится console.log в цикле с использованием оператора остатка от деления в JavaScript?
Что проверяют
Умеете ли вы читать код глазами движка и знаете ли, что % в JavaScript это остаток, а не математический модуль. Задача устная, поэтому проверяется ещё и аккуратность: правильный первый ход это попросить показать листинг, а не угадывать.
Как отвечать
Разбирайте вслух и по шагам: границы цикла, шаг, условие, что именно попадает под вызов. Классический вид задачи такой.
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) console.log(i);
}Здесь десять итераций, условию отвечают 0, 2, 4, 6 и 8, то есть пять вызовов. Ноль легко потерять, а он чётный. Общая формула помогает не считать на пальцах: для проверки i % k === 0 на отрезке от нуля до n без правой границы число срабатываний равно Math.ceil(n / k), так что при % 3 получится четыре, а не три.
Проговорите и сам оператор, ради него вопрос и задан. Знак результата совпадает со знаком делимого, поэтому -3 % 2 даёт -1. Значит, проверка нечётности через i % 2 === 1 на отрицательных числах молча ломается, а безопасная форма это i % 2 !== 0.
Где спотыкаются
Считают итерации вместо срабатываний условия и называют десять. Рядом живёт ошибка на границе: при i < 10 последним будет девять, а при i <= 10 итераций одиннадцать, и ответ меняется.
Второе: отвечают числом, не посмотрев код. Формулировка вопроса намеренно неполная, и попытка угадать вместо уточнения читается хуже, чем пауза с просьбой показать листинг или продиктовать его.
Третье: путают остаток с модулем и переносят привычку из других языков. Для циклического индекса при отрицательном шаге нужна форма ((i % n) + n) % n, а на дробных числах оператор вообще ненадёжен: 0.3 % 0.1 не равно нулю из-за двоичного представления.