我们知道,“=”、“==” 和“===”这三者之间是不一样的。具体怎样的不一样呢?今天来说说“==”的转换规则。
下面是一张“==”强制转换规则表。
| 参数类型1 | 参数类型2 | 强制转换 |
| null | undefined | 不转换,总是返回true |
| null或undefined | 其它任何非null或undefined的类型 | 不转换,总是返回false |
| 原始类型:string、number或boolean | Date对象 | 将原始类型转换成数字;将Date对象转换为原始类型。(优先尝试toString方法,再尝试valueOf方法) |
| 原始类型:string、number或boolean | 非Data对象 | 将原始类型转换成数字;将非Date对象转换为原始类型。(优先尝试toString方法,再尝试valueOf方法) |
| 原始类型:string、number或boolean | 原始类型:string、number或boolean | 将原始类型转换成数字 |
看了上面的表,我们再来细说一下==的个别常遇见的转换规则。
1.number类型与string类型比较,string会转换为number类型
'' == '0' //false
0 == ''//true;
0 == '0'//true
' \t\r\n '==0//true
2.null和undefined类型比较始终相等
null == undefined //true
我之前有写过一篇null和undefined的区别的文章,有兴趣的话可以移驾看看哦~
文章链接:JavaScript——undefined与null的区别
3.布尔类型与其它任何类型进行比较,布尔类型将会转换为number类型
false == 'false'//false
false == '0'//true
false == null//false
null == undefined //true
4.number类型或string类型与object类型进行比较,number或者string类型都会转换为object类型
var a = 0, b = {};
a == b//false
从上面的表和这四种例子来看,==的转换规则并不够严谨,如果语句需要特别严谨的话,珍爱生命,请使用===和!===
Biu~~~~~~~~
1071

被折叠的 条评论
为什么被折叠?



