Javascript Can';我不明白两个方程式之间的区别

Javascript Can';我不明白两个方程式之间的区别,javascript,if-statement,leap-year,Javascript,If Statement,Leap Year,我是Javascript新手,一直在尝试找出闰年计算器的最佳方程式。我编写了如下解决方案: if ((year % 4 ===0 && year % 100 !==0) || (year % 4 ===0 && year % 100 ===0 && year % 400 ===0)) { alert("Leap"); } else { alert("Not Leap"); } if ((year % 4 === 0 &&

我是Javascript新手,一直在尝试找出闰年计算器的最佳方程式。我编写了如下解决方案:

if ((year % 4 ===0 && year % 100 !==0) || (year % 4 ===0 && year % 100 ===0 && year % 400 ===0)) {
  alert("Leap");
} else {
  alert("Not Leap");
}
if ((year % 4 === 0 && year % 100 !== 0) || (year % 400 ===0)) {
  alert("Leap");
} else {
  alert("Not Leap");
}
完成后,我在谷歌上搜索了其他方法,发现可以这样写:

if ((year % 4 ===0 && year % 100 !==0) || (year % 4 ===0 && year % 100 ===0 && year % 400 ===0)) {
  alert("Leap");
} else {
  alert("Not Leap");
}
if ((year % 4 === 0 && year % 100 !== 0) || (year % 400 ===0)) {
  alert("Leap");
} else {
  alert("Not Leap");
}
但我不明白怎么会这样写,因为知道闰年的条件:

  • 如果年可以被4整除,但不能被100整除=闰
  • 如果年份可被4整除,可被100整除,可被400整除,则=闰
  • 否则就不是闰年了
我不理解第二个代码示例背后的逻辑,对我来说,这似乎是:

  • 如果年可以被4整除,但不能被100整除=闰
  • 仅当年份可被400整除时=闰(不包括其他条件)
  • 否则就不是闰年了

有人能解释一下为什么第二个代码示例也是有效的,以及它是如何解释的吗?

闰年的条件是年份可以被4整除而不是100整除,或者年份可以被400整除

从数学上讲,任何可以被400整除的东西都可以被4和100整除,这就是为什么闰年是if(x%4而不是x%100)或(x%400)


你可以这样看它:400=4*100,所以任何可以写成
n*400
的数字都可以写成
n*4*100
,所以你的条件是多余的。

如果我明确指出400可以被4和100整除,那么当一个数字可以被400整除时,即使没有进一步的检查,它也可以被4和100整除?您有一个带有多个条件的if语句。JS从上/下和左/右进行检查,所以用括号分组是关键。我接受了你的代码,在第一个代码中添加了一些修正,并对Khan Academy的页面进行了比较