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 次 |
| 最近记录: |