餘數 (%)
取餘 (%) 運算子返回一個運算元除以第二個運算元後的餘數。它總是採用被除數的符號。
試一試
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 取餘操作;否則,它執行 number 取餘操作。如果一個運算元變成 BigInt 而另一個變成 number,則丟擲 TypeError。
對於操作 n % d,n 稱為被除數,d 稱為除數。如果其中一個運算元是 NaN,n 是 ±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 除法,如果除數 y 為 0n,則會丟擲 RangeError。這是因為數字除以零的餘數返回 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® 2026 語言規範 # sec-multiplicative-operators |
瀏覽器相容性
載入中…