if 判断和 == 判断
2018-06-06 本文已影响0人
饥人谷_LS
if(xx) 判断
什么是 if(xx) 判断?
所谓的 if(xx) 判断,即是对括号中的 xx 或者说表达式通过布尔值判断结果。当然也有不是布尔值的时候,这时就会将表达式强制转换为布尔值之后进行判断。
原理
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0,-0或者 NaN 为 false,其他为 true |
String | 空字符串为 false,其他为 true |
Object | true |
a==b 判断
a==b 判断的两个规则
- 如果两个值类型相同,则执行严格相等的运算;
- 如果两个值类型不同:
(1)如果一个是 null,一个是 undefined,则二者相等;
(2)如果一个是数字,一个是字符串,则将字符串转换成数字后再比较;
(3)如果一个值是 true/false,则将其转换为1/0比较;
(4)如果一个值是对象,一个是数字或字符串,则尝试使用 .valueOf 和 .toString 转换后比较;
(5)其他的就都不相等了。
原理
x | y | 结果 |
---|---|---|
Null | Undefined | true |
Number | String | x == toNumber(y) |
Boolean | (any) | toNumber(x) == y |
Object | String or Number | toPrimitive(x) == y |
otherwise | otherwise | false |
toNumber
type | result |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | true -> 1,false -> 0 |
String | "abc" -> NaN,"123" -> 123 |
toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果,如果没有定义,再尝试调用 .toString 方法获取结果。