Остаток (%)
Базовая доступность Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Оператор остатка (%) возвращает остаток, полученный при делении одного операнда на второй операнд. Он всегда принимает знак делимого.
Попробовать
console.log(13 % 5); // Expected output: 3 console.log(-13 % 5); // Expected output: -3 console.log(4 % 2); // Expected output: 0 console.log(-4 % 2); // Expected output: -0
Синтаксис
x % y
Описание
Оператор % перегружен для двух типов операндов: number и BigInt. Сначала он приводит оба операнда к числовым значениям и проверяет их типы. Если оба операнда становятся BigInt, выполняется остаток BigInt; в противном случае выполняется остаток числа. Выбрасывается TypeError, если один операнд становится BigInt, а другой — числом.
Для операции n % d, n называется делимым, а d называется делителем. Операция возвращает NaN, если один из операндов — NaN, n — ±Infinity, или если d — ±0. В противном случае, если d — ±Infinity или если n — ±0, возвращается делимое n.
Когда оба операнда ненулевые и конечные, остаток r вычисляется как r := n - d * q, где q — это целое число, такое что r имеет тот же знак, что и делимое n, и при этом максимально близко к 0.
Обратите внимание, что, хотя в большинстве языков, '%' является оператором остатка, в некоторых (например, Python, Perl) это оператор по модулю. Модуль определяется как k := n - d * q, где q — это целое число, такое что k имеет тот же знак, что и делитель d, и при этом максимально близко к 0. Для двух значений с одинаковым знаком эти два понятия эквивалентны, но когда операнды имеют разные знаки, результат по модулю всегда имеет тот же знак, что и делитель, тогда как остаток имеет тот же знак, что и делимое, что может привести к их различию на одну единицу d. Чтобы получить операцию по модулю в JavaScript, вместо n % d используйте ((n % d) + d) % d. В JavaScript операция по модулю (для которой нет выделенного оператора) используется для нормализации второго операнда операторов побитового сдвига (<<, >> и т. д.), делая смещение всегда положительным значением.
Для деления BigInt выбрасывается RangeError, если делитель y — 0n. Это связано с тем, что остаток числа при делении на ноль возвращает NaN, но BigInt не имеет концепции NaN.
Примеры
Остаток с положительным делимым
13 % 5; // 3 1 % -2; // 1 1 % 2; // 1 2 % 3; // 2 5.5 % 2; // 1.5 3n % 2n; // 1n
Остаток с отрицательным делимым
-13 % 5; // -3 -1 % 2; // -1 -4 % 2; // -0 -3n % 2n; // -1n
Остаток с NaN
NaN % 2; // NaN
Остаток с Infinity
Infinity % 2; // NaN Infinity % 0; // NaN Infinity % Infinity; // NaN 2 % Infinity; // 2 0 % Infinity; // 0
Спецификации
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
remainder |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
Смотрите также
- Сложение (
+) - Вычитание (
-) - Деление (
/) - Умножение (
*) - Возведение в степень (
**) - Инкремент (
++) - Декремент (
--) - Унарное отрицание (
-) - Унарный плюс (
+) - Оператор остатка vs. оператор по модулю, автор Dr. Axel Rauschmayer (2019)
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder