双重否定+逻辑和Javascript

时间:2015-10-25 16:04:46

标签: javascript boolean-expression

我刚跑过这段代码

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

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

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

根据我在其他语言中的经验,这似乎是非典型的。我希望总是的逻辑和操作返回一个布尔值。任何人都可以解释为什么Javascript支持这个用例?

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

1 个答案:

答案 0 :(得分:4)

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

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

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