【问题标题】:Logical operators in JavaScript — how do you use them?JavaScript 中的逻辑运算符——你如何使用它们?
【发布时间】:2011-05-30 22:56:48
【问题描述】:

我不明白 &&、|| 和 ! 是如何工作的……无论是布尔值还是其他数据类型。你如何使用它们?

【问题讨论】:

    标签: javascript logical-operators


    【解决方案1】:

    Javascript 中的所有值要么是“真”,要么是“假”。

    • a && b 计算为第一个假操作数
    • a || b 计算为第一个真值操作数

    两个运算符都不会计算返回后的任何操作数。
    如果所有操作数都不匹配,它将评估为最后一个。

    • 如果a 为假,!a 的计算结果为true,如果a 为真,则为false。

    所有值都是真值,除了以下falsy:

    • false
    • +0
    • -0
    • NaN
    • ""
    • null
    • undefined
    • document.all

    【讨论】:

    • 它应该声明“所有值都是真实的......”,因为undefined是一个值,但也有变量undefined保存这个值,默认。 NaN 也不等于任何东西,甚至不等于它自己。
    • @Ivo:1:已修复。 2:这无关紧要; !NaN 是 true,所以 NaN 是假的。
    • 仍然 NaN == NaN 为假。所以它仍然是上面列表中的一个特例,人们可能会认为 NaN 的工作方式与其他所有假值一样。
    • @Ivo:SLaks 只列出了 JavaScript 的虚假值。他没有对NaN 或任何其他值提出任何其他要求。
    • 我知道这是古代历史但document.all?
    【解决方案2】:

    如果您想测试两个条件中的 两个 是否为真,请使用 &&:

    if (isX && isY)
    {
         // Do something.
    }
    

    如果您想测试 两个条件中的一个或两个是否为真,请使用 ||:

    if (isX || isY)
    {
         // Do something.
    }
    

    ! 反转布尔值(真值变为假,反之亦然)。

    【讨论】:

    • document.write("Cat"||"Dog") 呢?
    • @DarkLightA:我建议你不要写那样的代码!它会导致隐式转换,并且会让所有人感到困惑。
    • 它不应该让任何人感到困惑。大约 5 年前,短路一直是 javascript 中的一个常见习语。 Crockford 将|| 称为默认运算符,因此"Cat" || "Dog" 应为cat, defaults to dog。我个人将其阅读为cat, otherwise dog。
    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多