javascript - 闰年功能;这个解决方案如何运作?

标签 javascript equality boolean-logic

问题是这样的:

给定年份,报告是否为闰年。

这里棘手的事情是公历中的闰年发生:

on every year that is evenly divisible by 4
  except every year that is evenly divisible by 100
    unless the year is also evenly divisible by 400

我的解决方案(有效)是这样的:

export const isLeap = (year) => {
    const yearModFour = (year % 4) === 0 
    const yearModHundred = (year % 100) === 0
    const yearModFourHundred = (year % 400) === 0 
    const isLeapYear = yearModFour === yearModHundred === yearModFourHundred
    return isLeapYear
}

我得出这个结论是因为我错过了这样的逻辑:

on every year that is evenly divisible by 4
  and also evenly divisible by 100
    and also evenly divisible by 400

我的问题是,为什么这会起作用?

我不确定为什么我不使用 && 操作数,但话又说回来,它不会那样工作

最佳答案

让我们看一下谓词yearModFour ===yearModHundred ===yearModFourHundred,并列出一些将导致所有可能性的数字。

对于第 1 年,谓词的计算结果为:

(False === False) === False
             True === False
                 False

对于第 4 年,谓词的计算结果为:

(True === False) === False
           False === False
                 True

对于第 100 年,谓词计算为:

(True === True) === False
           True === False
               False

对于第 400 年,谓词的计算结果为:

(True === True) === True
           True === True
                True

现在这就是所有的可能性,这里不会有任何其他可能性。这是因为任何能被 400 整除的数字都可以被 100、4 和 1 整除;任何能被 100 整除的数也能被 4 和 1 整除;等等。

所以你的结论并不完全正确,因为它暗示了所有模运算之间的逻辑“与”。

关于javascript - 闰年功能;这个解决方案如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53168452/

相关文章:

c - 所有条件都相等的 If 语句

javascript - 在文字游戏中使用数组

r - R 中的近似等于

c++ - 四向等价

java - 在 Java 中为列表过滤编写 AND 过滤器的简洁方法

database - 存储逻辑规则的适当数据结构和数据库模式是什么?

javascript - angular js在单击时向图库中的图像添加一个类

java - 从 JavaScript 调用 Java 时出现不可恢复的 stackoverflow 错误

javascript - 由Ajax调用的Python脚本,由Django服务器执行

python-3.x - Python 3 枚举元组相等总是失败