==和===的区别

==  两边值类型不同时,会先进行类型转换,然后在比较;

=== 不做类型转换,若类型不同就不相等;

== 的转换过程:

  • 判断比较的是否是 null 或者是 undefined, 如果是, 返回 true .
  • 判断两者类型是否为 string 和 number, 如果是, 将字符串转换成 number
  • 判断其中一方是否为 boolean, 如果是, 将 boolean 转为 number 再进行判断
  • 判断其中一方是否为 object 且另一方为 string、number 或者 symbol , 如果是, 将 object 转为原始类型再进行判断

经典面试题:  [] == ![]

转化过程:

  1. !运算符优先级最高,![]会被转化成false,因此: [] == false
  2. 其中一方为boolean,将boolean转化成number,因此: [] == 0
  3. 其中一方为object且另一方为number,将[]转成原始数据类型,调用toString(),[]为空字符串,因此: ' ' == 0
  4. 两者是string和number,将string转成number,因此: 0 == 0
  5. 两边数据类型相同, 0==0 true

 


 

 


版权声明:本文为Hanhanyoona原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。