可能重复:
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'
没有。为什么会这样?
答案 0 :(得分:2)
''
是假值,而'0'
不是假值。
(尝试'0' == false
时,==
会进行类型转换,因此返回true。)