1、首先year%4!==0这个表达式有误,应该是year%4!=0。
2、楼主要明白
(year%4!=0)||(year%100==0&&year%400!=0)
这个表达式不是判断year是否“是闰年”,而是判断year是否“不是闰年”。
3、闰年的两种情况:
a,对于普通年份,要被4整除。例如2008
b,对于能被100整除的年份,还需要能被400整除才是闰年。例如2000是闰年,但1900就不是闰年,因为1900能被100整除,但不能被400整除。
4、反过来,一个年份不是闰年的两种情况:
a,不能被4整除。即对应代码(year%4!=0)
b,能被100整除,year%100==0,但不能被400整除year%400!=0。两个是且的关系,因此对应代码(year%100==0 && year%400!=0)
上面a,b两种情况是“或”的关系,也就是满足其中之一就不是闰年。因此合起来代码为
(year%4!=0) || (year%100==0 && year%400!=0)
当year不是闰年时,上面整个表达式的值为1,是闰年时,表达式值为0
5、程序判断时,是先判断||的左边,即(year%4!=0),若满足则表达式返回为1,||右边不用判断。若不满足,继续判断||的右边(year%100==0 && year%400!=0),对于&&,也是先判断左边year%100==0,若其不满足,则返回为0,右边year%400!=0将不再判断,否则继续判断year%400!=0,若满足则返回为1,否则返回为0。
上面这个式子因为各部分都加了括号,因此对于运算顺序的把握不是特别重要。关键要搞清闰年的确切定义。