双重否定 + 逻辑与 Javascript

Double-negation + logical and in Javascript

我只是 运行 跨过这段代码

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

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

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

根据我使用其他语言的经验,这似乎很不正常。我期望逻辑和操作 always return 一个布尔值。谁能解释为什么 Javascript 支持这个用例?

此外,向我发送此方向的代码是否是强制围绕逻辑与进行 bool 的最佳方式?我知道 new Boolean,但这不是 return 像双重否定那样的原始类型,所以也许这就是要走的路?

&&|| 运算符的作用类似于布尔 AND 和 OR,但它们不影响表达式值。使用 JavaScript "truthiness" 规则评估表达式并测试值,但整体表达式值是实际操作数表达式(好吧,其中之一)的值。

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

可以在没有 new 的情况下调用 Boolean 构造函数来执行 "truthiness" 测试和 return 布尔原语。然而,使用 !! 是相当惯用的。