javascript中,if判断语句跟别的语言一样,符合其判断条件就执行区块里的代码,不符合就跳到别的if区块判断,都没有,就接着往下执行。
if(xx){
}
或
if(x==x){
}
然而,js的if(xx)和==在判断时,会对不同数据类型 做类型转换,很是令人头晕,所以建议
能用===,就用,能同时判断类型;能在判断前,手动转换类型,就转。两者会更容易。
但作为面试常考题目,和coding时要处理的极端状况(比如 改别人的bug),js中==的类型转换,还是值得学习的。
所以,下面总结了所有if和==的判断规律,经常查阅,练出直觉,便也不头晕了。
if(xx)
首先,若if(xx)括号内是个数值,if来判断xx数值的规律,如下:
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
if(x==x)
首先,==两边的不同情况 会进行如下的判断:
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和toPrimitive如何做数据类型转换,如下:
toNumber
type | Result |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 (" "内不管几个空格,都转为0) |
toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果。
网友评论