Spec-Zone.ru › JavaScript

Остаток (%)

Базовая доступность Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 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

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-multiplicative-operators

Совместимость с браузерами

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API