> Как реализовать проверку кратности с остатком от деления в JavaScript (JavaScript)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: ITQ Group МКБ БАНК
Стек: JavaScript
> Пример ответа
Короткий ответ
Проверка кратности в JavaScript выполняется через оператор % (remainder), который возвращает остаток от деления. Число a кратно b, если a % b === 0. Важно учитывать знак делимого: для отрицательных чисел остаток может быть отрицательным, поэтому надёжнее использовать Math.abs(a) % b === 0 или проверять a % b === 0 с учётом того, что -6 % 3 даёт -0, что строго равно 0.
Подробное объяснение
Оператор % в JavaScript работает как remainder, а не modulo. Разница проявляется при отрицательных значениях: -7 % 3 вернёт -1, тогда как математическое modulo дало бы 2. Для проверки кратности это не критично, если делитель положительный - остаток будет 0 только когда число действительно кратно. Однако если делитель тоже отрицательный, результат может быть неочевидным.
На практике для проверки кратности обычно используют:
JAVASCRIPTfunction isMultiple(n, divisor) {return n % divisor === 0;}
Если нужно обрабатывать отрицательные делители или гарантировать неотрицательный остаток, применяют Math.abs(n) % Math.abs(divisor) === 0.
Также стоит помнить про деление на ноль: n % 0 вернёт NaN, поэтому нужно явно проверять делитель.
На практике
В реальных задачах кратность используется для:
- фильтрации элементов по индексу (например, каждый третий);
- циклических операций (карусели, слайдеры);
- проверки чётности (
n % 2 === 0); - работы с сетками и раскладками (колонки, ряды).
Для больших чисел (за пределами Number.MAX_SAFE_INTEGER) обычный % может давать неточные результаты - тогда используют BigInt с оператором % для bigint типов.
Пример кода
JAVASCRIPT// Базовая проверкаconst isEven = (n) => n % 2 === 0;// С защитой от отрицательных значенийconst isMultiple = (n, d) => d !== 0 && Math.abs(n) % Math.abs(d) === 0;// Для BigIntconst isMultipleBig = (n, d) => d !== 0n && n % d === 0n;// Пример использованияconsole.log(isMultiple(9, 3)); // trueconsole.log(isMultiple(-9, 3)); // trueconsole.log(isMultiple(10, 3)); // falseconsole.log(isMultiple(7, 0)); // false (защита от NaN)
Как отвечать на собеседовании
Начните с оператора % и простого примера. Затем упомяните нюанс с отрицательными числами и делением на ноль. Если спросят про производительность - скажите, что % работает за O(1) и не требует оптимизаций. Для больших чисел предложите BigInt. Покажите, что понимаете разницу между remainder и modulo - это часто проверяют.
Что проверяет интервьюер
- знание базового оператора
%; - понимание edge cases (ноль, отрицательные числа, NaN);
- умение писать чистую функцию с валидацией;
- осведомлённость о
BigIntдля больших чисел; - способность объяснить разницу между remainder и modulo.
Типичные ошибки
- забывают про деление на ноль - получают
NaNвместоfalse; - не учитывают отрицательные числа - для
-9 % 3результат-0, но-9 % 2даст-1, что ломает логику, если проверять=== 0безMath.abs; - используют
%для чисел большеNumber.MAX_SAFE_INTEGER- получают неточный результат; - путают remainder и modulo, ожидая неотрицательный остаток всегда;
- не проверяют тип аргументов - если передать строку,
%приведёт её к числу, но это может быть неожиданно.
> Похожие задачи по frontend
Как выполняется функция с учетом хостинга в JavaScript
Как использовать try-catch для обработки ошибок при парсинге JSON в JavaScript
Что происходит после отправки запроса в JavaScript
Как работает HttpOnly cookie и почему к нему нельзя достучаться с JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью