Javascript中的布尔求值规则是什么?
可能重复:Javascript中的布尔求值规则是什么?,javascript,boolean,Javascript,Boolean,可能重复: 我目前正在学习Javascript,到目前为止,我对这种语言很满意 今天早上,当我写测试时,我意识到一些我无法解释的事情: 计算布尔表达式时,我们有: // a && b returns b in case a && b are evaluated to true: OK '2' && '3' => '3' '3' && '2' => '2' // a && b returns a in
我目前正在学习Javascript,到目前为止,我对这种语言很满意 今天早上,当我写测试时,我意识到一些我无法解释的事情: 计算布尔表达式时,我们有:
// a && b returns b in case a && b are evaluated to true: OK
'2' && '3' => '3'
'3' && '2' => '2'
// a && b returns a in case a is evaluated to false, b otherwise: OK
false && '' => false
'' && false => ''
// '' and '0' are evaluated to false in a boolean context: OK
'' == false => true
'0' == false => true
// Here is the "problem":
'' && '0' => '' // To be expected: both operands evaluate to false
'0' && '' => '' // What ?!!
所以我的问题很简单:'0'&&&
为什么返回'
我希望两个操作数的计算结果都为false,但在该上下文中,'0'
似乎不是这样。为什么会这样?“
是一个错误的值,而'0'
不是错误的值
(当尝试
'0'==false
时,=
进行类型转换,因此返回true。)MDN似乎提供了一个很好的解释:<出于某种原因,code>Boolean('0')==true。@AndreKR:这个问题确实回答了我的问题。谢谢你的链接。投票也结束了。在@OldPro上有更好的答案:无意冒犯,但是,你所引用的问题实际上与所表达的问题没有什么关系。我的问题是关于同一运算符&&
的不同行为取决于操作数,而另一个问题是关于&&
和|
运算符之间的差异。@ereOn,对不起,我浏览了一下你的问题,发现你不明白为什么'0'&&&&'>'>'
,没有看到你不明白'0'
是真实的。我现在明白了,您的基本困惑来自于产生'0'==false=>true
的极度混乱的=
运算符。那么,为什么在使用=
时,“非false”值会求值为false
?您现在知道这一点,但为了将来的读者,'0'==false
是true
,因为两者都被=
操作符转换为数字进行比较,因此比较结果为0==0
。