取余(%)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 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

语法

js
x % y

描述

对于运算:n % d,其中 n 被称为被除数,d 被称为除数。如果其中的任意一个操作数为 NaN,或 n 为正负无穷(±Infinity),又或者 d 为 ±0,则该运算返回 NaN。否则,如果 d 为正负无穷(±Infinity),或 n 为 ±0,则返回被除数 n

如果两个操作数都非零且有限(非正负无穷)时,余数 r 将通过 r := n - d * q 计算获得,其中 q 是一个使得 r 与被除数 n 具有相同符号,并且会使 r 尽可能地接近于 0 的整数。

请注意,虽然在大多数语言中,% 是取余运算符,但在某些语言(例如:Python 和 Perl)中,它是取模运算符。取模运算被定义为 k := n - d * q,其中 q 是一个使得 k 与除数具有相同符号,并且会使 k 尽可能地接近于 0 的整数。对于同号的两根操作数,两者是等价的,但在操作数具有不同的符号时,取模运算的结果总是与除数同号,而取余运算则是余数与被除数同号,d 的符号即可使两者的结果不相同。为了在 JavaScript 中使用 n % d 实现取模运算,可以使用 ((n % d) + d) % d。在 JavaScript 中,模运算(没有专用的运算符)用于规范化按位移位运算符(<<>>,等等)的第二个操作数,以使得偏移量始终为一个正数。

示例

被除数为正数

js
13 % 5; // 3
1 % -2; // 1
1 % 2; // 1
2 % 3; // 2
5.5 % 2; // 1.5

被除数为负数

js
-13 % 5; // -3
-1 % 2; // -1
-4 % 2; // -0

被除数为 NaN

js
NaN % 2; // NaN

被除数为 Infinity

js
Infinity % 2; // NaN
Infinity % 0; // NaN
Infinity % Infinity; // NaN
2 % Infinity; // 2
0 % Infinity; // 0

规范

Specification
ECMAScript® 2025 Language Specification
# sec-multiplicative-operators

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Remainder (%)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

参见