面试题总结

一、== 和 === 有什么区别?

=== 就是判断两者类型和值是否相同。

对于 == 来说,如果对比双方的类型不一样的话,就会进行类型转换

  1. 首先会判断两者类型是否相同。相同的话就是比大小了
  2. 类型不相同的话,那么就会进行类型转换
  3. 会先判断是否在对比 null 和 undefined,是的话就会返回 true
  4. 判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number
  5. 判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断
  6. 判断其中一方是否为 object 且另一方为 stringnumber 或者 symbol,是的话就会把 object 转为原始类型再进行判断

闲着看一个面试题:

参考地址:https://blog.csdn.net/qiqi_77_/article/details/79456605

[]==[] // false 

俩边都是相同数据类型,直接比较大小。因为[]属于引用类型,俩个[]指向不同的堆内存,所以比较的结果为false

[]==![]

现在开始分析,!的优先级要大于==,先执行右边的![],![]=>false

之后就是比较[]==false

适用上面第5条规则:先把flase转换为0,,结果就是比较[]==0

然后适用第6条规则,[]转换为值,Number([]) = 0

所以0==0  结果胃true

 

posted @ 2019-01-10 08:43  zhaobao1830  阅读(163)  评论(0编辑  收藏  举报