Javascript:不是在运行中摸索模

Javascript:不是在运行中摸索模,javascript,modulo,Javascript,Modulo,我理解模的基本概念:它给你带除法的余数。我似乎无法掌握如何在实践中正确使用它。例如,以下代码接受一个数字,如果它被2等分,则返回true,否则返回false: if(number % 2){ return false; } else{ return true; } 在我看来,直觉上(也是错误的)你编码它的方式是将它设置为模0: if (number/2 %0) { return true 有人能解释第一个是如何正确的以及为什么正确的吗?请记住,我显然是非常密集的…要检查一个数字是否在不

我理解模的基本概念:它给你带除法的余数。我似乎无法掌握如何在实践中正确使用它。例如,以下代码接受一个数字,如果它被2等分,则返回true,否则返回false:

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;
  }
}