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 方法获取结果。