【问题标题】:Double-negation + logical and in Javascript [duplicate]双重否定+逻辑和Javascript [重复]
【发布时间】:2015-10-25 16:04:46
【问题描述】:

我刚刚遇到了这段代码

var someBool = !!(o.a && o.a.t);

我正要删除双重否定,然后意识到它强制 someBool 成为布尔值...查看 on the MDN,我找到了这个例子

a5 = "Cat" && "Dog"; // t && t returns "Dog"

根据我在其他语言方面的经验,这似乎不典型。我希望逻辑和操作 总是 返回一个布尔值。谁能解释一下为什么 Javascript 支持这个用例?

另外,将我发送到这个方向的代码是强制使用逻辑与的布尔值的最佳方法吗?我知道new Boolean,但这不会返回像双重否定这样的原始类型,所以也许这就是要走的路吗?

【问题讨论】:

    标签: javascript boolean-expression


    【解决方案1】:

    &&|| 运算符具有类似于布尔 AND 和 OR 的效果,但它们不影响表达式值。使用 JavaScript “真实性”规则评估表达式并测试值,但整体表达式值是实际操作数表达式的值(嗯,是其中之一)。

    是的,这与 C 和 Java 等不同。JavaScript 是一种不同的语言,有自己的规则。

    可以在没有new 的情况下调用Boolean 构造函数来执行“真实性”测试并返回一个布尔原语。但是,使用 !! 是相当惯用的。

    【讨论】:

    • 很好的解释,谢谢。
    猜你喜欢
    • 2020-10-02
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2023-04-02
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多