pau*_*hap 6 javascript boolean-expression boolean-operations
0 == false
并且'0' == false
都'真'
然而,(true && 0)
是'假',而(true && '0')
'是'.
为什么?
的抽象比较(==
)的规则中描述ES5 11.9.3而对于逻辑运算规则(&&
)中描述ES5 11.11.
简而言之,==
只是比它更复杂&&
.当&&
只使用内部ToBoolean()
评估其操作数,==
有可能导致在使用的各种条件ToBoolean()
,ToNumber()
和/或ToPrimitive()
.
(0 == false) == true
:
7.如果Type(y)是布尔值,则返回比较结果x == ToNumber(y)
ToNumber(false) === 0
所以0 == 0
,所以true
.
('0' == false) == true
:
这也通过了第7步,结果是'0' == 0
.
然后,从顶部开始,它到达第5步:
5.如果Type(x)是String而Type(y)是Number,则返回比较结果ToNumber(x)== y.
ToNumber('0') === 0
,又一次0 == 0
又一次true
.
!!(true && 0) == false
&&
如果它是falsy(ToBoolean(...) === false
)或第二个操作数,则返回第一个操作数.
这是严格的(true && 0) === 0
.
并且,当用作if
条件时,result(0
)也将通过ToBoolean(...)
和传递ToBoolean(0) === false
.
!!(true && '0') == true
再次,这返回第二个操作数,'0'
.
然而这一次,ToBoolean('0') === true
因为'0'
是一个非空的字符串,使其truthy.
此外,如果您想要更简单的比较规则,请使用严格比较(===
,11.9.6).
归档时间: |
|
查看次数: |
149 次 |
最近记录: |