Javascript:不是在运行中摸索模
我理解模的基本概念:它给你带除法的余数。我似乎无法掌握如何在实践中正确使用它。例如,以下代码接受一个数字,如果它被2等分,则返回true,否则返回false:Javascript:不是在运行中摸索模,javascript,modulo,Javascript,Modulo,我理解模的基本概念:它给你带除法的余数。我似乎无法掌握如何在实践中正确使用它。例如,以下代码接受一个数字,如果它被2等分,则返回true,否则返回false: if(number % 2){ return false; } else{ return true; } 在我看来,直觉上(也是错误的)你编码它的方式是将它设置为模0: if (number/2 %0) { return true 有人能解释第一个是如何正确的以及为什么正确的吗?请记住,我显然是非常密集的…要检查一个数字是否在不
if(number % 2){
return false;
}
else{
return true;
}
在我看来,直觉上(也是错误的)你编码它的方式是将它设置为模0:
if (number/2 %0) {
return true
有人能解释第一个是如何正确的以及为什么正确的吗?请记住,我显然是非常密集的…要检查一个数字是否在不留下余数的情况下进行除法,需要检查模除法的结果是否等于零
if ((number % 2) == 0){
return true; // number was even
} else {
return false; // number was odd
}
当您使用模(%
)运算符时,您基本上是在说:
编号%x
:将
数字
除以x
。将结果向下舍入到最接近的整数。将该整数乘以x
。给我这个数字到原始数字的距离(绝对值)
这可能不是模的精确数学定义,但我相信它非常符合我们的需要
举几个例子
2%2=0(2/2=1,1*2=2,abs(2-2)=0)3 % 2 = 1 (3 / 2 ≐ 1,1*2=2,abs(2-3)=1)
4%2=0(4/2=2,2*2=4,abs(4-4)=0)
符号的问题在于,它是一个需要程序员执行的额外操作。由于目前我们表示模运算的方式非常简洁,不需要我们自己进行任何分割,因此有可能在引擎盖下进行性能优化 为了表达我认为是您的意图,您基本上使用当前语法计算模,并将其与特定值进行比较:
if (number % 2 === 0)
return true // Yup, its divisible by 2
从文件:
在前面的语句中,余数运算符返回第一个操作数与第二个操作数的模,即var1模var2,其中var1和var2是变量。模函数是var1除以var2的整数余数
考虑到这一点,以下是对几个值使用%
的结果:
59 % 2
> 1
60 % 2
> 0
0
在javascript中是一个错误的值,因此60%2
的结果永远不会通过if
测试。要进行正确的比较,您需要直接检查值是否为0
:
if (number % 2 === 0)
return true
在其他答案的基础上,我想指出,当您已经计算布尔值时,使用
if/else
显式返回布尔值过于冗长
如果在If/else
中执行的所有操作都是在任意一侧返回布尔值,则可以减少返回表达式
好:
坏的:
这一点以前已经讨论过了:表面细节-你不需要把模运算放在大括号中-它的计算结果就像任何其他算术运算一样。是的,我知道,但我喜欢用包含多个运算符的条件显式表示。它只是让那些可能不知道操作顺序的读者明白了这一点。
function isEven(num) {
return (num % 2 === 0);
}
function isOdd(num) {
return (num % 2 !== 0);
}
function badIsEven(num) {
if (number % 2 === 0) {
return true;
} else {
return false;
}
}