剩餘模數()
餘數/模數運算子(%
)返回(整數)除法後的餘數。
console.log( 42 % 10); // 2
console.log( 42 % -10); // 2
console.log(-42 % 10); // -2
console.log(-42 % -10); // -2
console.log(-40 % 10); // -0
console.log( 40 % 10); // 0
當一個運算元除以第二個運算元時,此運算子返回剩餘的餘數。當第一個運算元為負值時,返回值將始終為負值,反之亦然,為正值。
在上面的例子中,10
可以從 42
中減去四次,然後再沒有足夠的東西在沒有改變符號的情況下再次減去。剩下的就是:42 - 4 * 10 = 2
。
餘數運算子可能對以下問題有用:
-
測試整數是否(不)可被另一個數字整除:
x % 4 == 0 // true if x is divisible by 4 x % 2 == 0 // true if x is even number x % 2 != 0 // true if x is odd number
從
0 === -0
開始,這也適用於x <= -0
。 -
在
[0, n)
間隔內實現值的迴圈遞增/遞減。
假設我們需要將整數值從 0
增加到(但不包括)n
,所以 n-1
之後的下一個值變為 0
。這可以通過這樣的虛擬碼來完成:
var n = ...; // given n
var i = 0;
function inc() {
i = (i + 1) % n;
}
while (true) {
inc();
// update something with i
}
現在概括上述問題並假設我們需要允許將該值從 0
遞增和遞減到(不包括)n
,因此 n-1
之後的下一個值變為 0
並且 0
之前的前一個值變為 n-1
。
var n = ...; // given n
var i = 0;
function delta(d) { // d - any signed integer
i = (i + d + n) % n; // we add n to (i+d) to ensure the sum is positive
}
現在我們可以呼叫 delta()
函式傳遞任何整數,包括正數和負數,作為 delta 引數。
使用模數來獲得數字的小數部分
var myNum = 10 / 4; // 2.5
var fraction = myNum % 1; // 0.5
myNum = -20 / 7; // -2.857142857142857
fraction = myNum % 1; // -0.857142857142857