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转化为基础类型。