餘數 (%)

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

取餘 (%) 運算子返回一個運算元除以第二個運算元後的餘數。它總是採用被除數的符號。

試一試

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

描述

% 運算子對於兩種型別的運算元是過載的:number 和 BigInt。它首先將兩個運算元強制轉換為數值並測試它們的型別。如果兩個運算元都變成 BigInt,它執行 BigInt 取餘操作;否則,它執行 number 取餘操作。如果一個運算元變成 BigInt 而另一個變成 number,則丟擲 TypeError

對於操作 n % dn 稱為被除數,d 稱為除數。如果其中一個運算元是 NaNn 是 ±Infinity,或者 d 是 ±0,則操作返回 NaN。否則,如果 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) + d) % d 來代替 n % d。在 JavaScript 中,模數運算(沒有專用運算子)用於規範化位移運算子(<<>> 等)的第二個運算元,使偏移量始終為正值。

對於 BigInt 除法,如果除數 y0n,則會丟擲 RangeError。這是因為數字除以零的餘數返回 NaN,但 BigInt 沒有 NaN 的概念。

示例

正被除數取餘

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

3n % 2n; // 1n

負被除數取餘

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

-3n % 2n; // -1n

與 NaN 取餘

js
NaN % 2; // NaN

與 Infinity 取餘

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

規範

規範
ECMAScript® 2026 語言規範
# sec-multiplicative-operators

瀏覽器相容性

另見