if 和 == 虽然都是通过布尔值来判断结果的,但是这两个判断方式的原理有不小的差距。
if(xx) 的判断方式
if 会将括号中的表达式强制转化为布尔值,然后根据转换的结果进行判断。
转换规则
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
== 的判断方式
== 在比较的时候,JavaScript 会自动帮我们进行类型转换,再进行比较运算。转换规则如下:
- 如果两边值类型相同,就直接执行比较运算
- 如果两个值类型不相等:
- 如果一个是 null, 一个是 undefined ,那么返回 true
- 如果一个是数字,一个是字符串,先将字符串转换为数字,然后比较
- 如果一个值是布尔值,一个值为非布尔值,那么将布尔值转换为 0/1 ,然后比较
- 如果一个值为对象,一个值为数字或者字符串,则尝试使用 valueOf 和 toString 进行转换后比较
- 其它情况返回 false