我刚跑过这段代码
var someBool = !!(o.a && o.a.t);
我准备删除双重否定,然后意识到它强制someBool
是一个布尔值......看on the MDN,我找到了这个例子
a5 = "Cat" && "Dog"; // t && t returns "Dog"
根据我在其他语言中的经验,这似乎是非典型的。我希望总是的逻辑和操作返回一个布尔值。任何人都可以解释为什么Javascript支持这个用例?
另外,向我发送这个方向的代码是强制一个bool围绕逻辑的最佳方法吗?我知道new Boolean
,但这不会返回像双重否定这样的原始类型,所以也许这就是要走的路?
答案 0 :(得分:4)
&&
和||
运算符的效果类似于布尔AND和OR,但它们不会影响表达式值。使用JavaScript“真实性”规则评估表达式并测试值,但整体表达式值是实际操作数表达式的值(嗯,其中之一)。
是的,这与C和Java等不同.JavaScript是一种不同的语言,有自己的规则。
可以在没有Boolean
的情况下调用new
构造函数来执行“真实性”测试并返回布尔基元。然而,使用!!
是相当惯用的。