面试题总结
一、== 和 === 有什么区别?
===
就是判断两者类型和值是否相同。
对于 ==
来说,如果对比双方的类型不一样的话,就会进行类型转换
- 首先会判断两者类型是否相同。相同的话就是比大小了
- 类型不相同的话,那么就会进行类型转换
- 会先判断是否在对比
null
和undefined
,是的话就会返回true
- 判断两者类型是否为
string
和number
,是的话就会将字符串转换为number
- 判断其中一方是否为
boolean
,是的话就会把boolean
转为number
再进行判断 - 判断其中一方是否为
object
且另一方为string
、number
或者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