1

可能重复:
为什么 ('0' ? 'a' : 'b') 的行为不同于 ('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' && ''return ''

我希望两个操作数都评估为 false,但在这种情况下'0'似乎没有。为什么会这样?

4

1 回答 1

2

''是假值,而'0'不是假值。

(当尝试'0' == false进行==类型转换时,它会返回 true。)

于 2012-10-17T09:16:46.587 回答