== 两边值类型不同时,会先进行类型转换,然后在比较;
=== 不做类型转换,若类型不同就不相等;
== 的转换过程:
- 判断比较的是否是 null 或者是 undefined, 如果是, 返回 true .
- 判断两者类型是否为 string 和 number, 如果是, 将字符串转换成 number
- 判断其中一方是否为 boolean, 如果是, 将 boolean 转为 number 再进行判断
- 判断其中一方是否为 object 且另一方为 string、number 或者 symbol , 如果是, 将 object 转为原始类型再进行判断
经典面试题: [] == ![]
转化过程:
- !运算符优先级最高,![]会被转化成false,因此: [] == false
- 其中一方为boolean,将boolean转化成number,因此: [] == 0
- 其中一方为object且另一方为number,将[]转成原始数据类型,调用toString(),[]为空字符串,因此: ' ' == 0
- 两者是string和number,将string转成number,因此: 0 == 0
- 两边数据类型相同, 0==0 true
版权声明:本文为Hanhanyoona原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。