解密类型转换:if(xx)和 a==b的判断
正在学习JS函数,感觉很懵,可能是有某个点没有理解,所以导致串联不起来吧!然后准备不看函数了,写一篇关于if(xx)和a==b的判断
首先我们先来说一下相等的概念:
我们知道可以使用==或===判断两个值的相等性,其中区别相信大家清楚,===是严格相等的意思,只需要注意NaN和NaN不等就行了。而使用==的时候,JavaScript会帮我们做类型转换,造成一些匪夷所思的结果,那么使用==的时候会在那些情况下做类型转换,又会换成什么样子呢?
- 如果两个值类型相同,则执行严格相等的运算
- 如果两个值的类型不同,那么就好玩了,看下面吧
1、如果一个是null,一个是undefined,那么相等(可以硬背下来)
2、如果一个是数字,一个是字符串,先将字符串转位数字,然后在比较
3、如果一个值是true/false则将其转为1/0比较
4、如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
5、其他就不相等了
看着判断if(xx)和a==b比较难记,其实可以总结为三句话:
- 空字符串是false
- 其他都是true
- 对象全是true
觉得没有理解,别慌,看完这个表格你就懂了
if的判断
对于括号里的表达式,会被强制转换为布尔类型:
类型 | 结果 |
---|---|
undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0,-0,或者NaN为false,其他为true |
string | 空字符串为false,其他的都是true |
object | true |
然后看几个题吧:
imageimage
看看上面这题应该不难吧,运用上面表格的东西,转换为布尔类型比较,为true就输出为false就没有输出
==的判断
*对于==的判断,JS是怎么处理的?
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方法获取结果
现在在看下题目吧
imageimage
image
这里需要注意的就是遇到取反的时候就是转换成布尔,在进行比较;还有就是undefined==null比较特殊,这是比较死的,记住相等就可以了
网友评论