Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的布尔求值规则是什么?_Javascript_Boolean - Fatal编程技术网

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