1.区别:
==只比较数值,在比较的过程中数据可进行数据类型转换
===比较值和数据类型,在比较的过程中数据不可进行数据类型转换
2.null和undifined区别
null表示无的对象,此处没有值,null用来占位的,转换Number类型为0,typeof(null)为object
undifined表示缺少值,即此处应该有值,但没有定义,转换为Number类型为NaN,typeof(undifined)为undifined
3.null和undifined比较
null==undifined是true
null===undifined是false
原因:在代码规范中提到, 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值,并且规定null 和 undefined 是相等的。null 和 undefined都代表着无效的值。
如果不是相等性比较:
null>0 //null转化为number,为0,所以0>0结果为false。
null>=0 //null转化为number,为0>=0,所以结果为true。
null==0 // null在做相等性判断时,不进行数据类型转换,所以null和0为不同类型数据,结果为false
4.==比较运算符底层细节
如果x是null,y是undifined,返回true;
如果x是数值,y是字符串,返回x==Number(y)的比较结果;
如果x是布尔值,返回Number(x) == y的比较结果
如果x是字符串或数值或Symbol值,y是对象,返回x == ToPrimitive(y)的结果
以上情况不满足结果都是false
例如:'a' == true
1.首先一方是布尔值true先转为数值型为1,'a' == 1
2.然后字符串需要转为数值型,a转为NaN,比较NaN==1 结果为false