javascript中,真假的判断,常常令人困惑.同样的表达式,在不同的操作符下会有不同结果。在此做个简单的总结。
条件判断
根据ES5规范,以if运算符为例,变量转为布尔类型后的结果如下
类型 | 结果 |
---|---|
Undefined | false |
Null | flase |
Boolean | 不转换,结果与原表达式相同 |
Number | +0,-0,NaN为false,其他为true |
String | 字符串为空时,结果为false |
Object | true |
==
抓住两个大原则: undefined与null彼此相等;其余大多数类型都被强制转化为number以便比较。
以x == y为例给出下表
x的类型 | y的类型 | 结果 |
---|---|---|
x、y类型相同 | ------ | 遵循严格相等(===) |
null | Undefined | true |
Undefined | null | true |
number | String | x == toNumber(y) |
String | Number | toNumber(x) == y |
Boolean | 任意 | toNumber(x) == y |
(any) | Boolean | x == toNumber(y) |
String or Number | Object | x == toPrimitive(y) |
其他情况 | ------ | false |
附:强制转化结果
toNumber
类型 | Result |
---|---|
Undefined | NaN |
Null | +0 |
Boolean | 1,true;0,false |
Number | 与原数字相同 |
String | “abc” -> NaN;“123” -> 123 |
Object | 1. 将primValue转化为基础类型 2. 返回 ToNumber(primValue). |
ToPrimitive
即使用valueOf或toString将object转化为基础类型。