对于==如果双方类型不同,就会进行类型转换后,再进行比较。
对于===就简单多了,就是判断两者类型和值是否相同。
==判断的流程如下:
1.首先会判断两者间类型是否相同,相同就比大小
2.类型不同的话,就会进行类型转换
3.会先判断是否再对比null和undefined,是的话就会返回true
4.判断两者类型是否为string和number,是的话将字符串转换为number
5.判断其中一方是否为boolean,是的话就会把boolean转为number再进行判断
6.判断其中一方是否为object且另一方为string、number或者symbol,是的话就会把object转为原始类型再进行判断
由以上规则,分析以下例子:
请正确写出[] == [] 和[] == ![]的结果。
答:[] ==[];//false [] == ![];//true
分析如下:
[]==[]; //false,在两边都是相同数据类型时,==是直接比较两边数据,结果为false,因为[]是引用类型,分别指向不同的堆内存,所以结果是false。
[]==![]; //true,首先 ! 的优先级要大于==的,所以先运算右边,![]结果为false,又因为其中一方为boolean,则将其转为number再进行判断,![]为false,是值类型,即Number(false)=>0,[]为引用数据类型,Number([])=>0