剩余模数()
余数/模数运算符(%
)返回(整数)除法后的余数。
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