【发布时间】:2012-10-07 12:05:13
【问题描述】:
可能重复:
Why does (‘0’ ? ‘a’ : ‘b’) behave different than (‘0’ == true ? ‘a’ : ‘b’)
我目前正在学习 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' 似乎没有。为什么会这样?
【问题讨论】:
-
MDN 似乎提供了一个很好的解释:developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/…。
Boolean('0') == true出于某种原因。 -
@AndreKR:这个问题确实回答了我的问题。感谢您的链接。也投票关闭。
-
@OldPro:没有冒犯,但是,您引用的问题实际上与表达的问题无关。我的问题是关于同一运算符
&&的不同行为,具体取决于操作数,而另一个问题是关于&&和||运算符之间的区别。 -
@ereOn,对不起,我浏览了你的问题,发现你不明白为什么
'0' && '' => ''并错过了你不明白'0'是真实的。我现在看到您的基本困惑来自产生'0' == false => true的极其令人困惑的==运算符。
标签: javascript boolean