区别:
==允许在相等比较中做强制类型转换而===不允许
1 | var a=42; |
ES5中定义:
- 如果Type(x)是数字,Type(y)是字符串,则返回x==ToNumber(y)的结果
- 如果Type(x)是字符串,Type(y)是数字,则返回ToNumber(x)==y的结果
其他类型和布尔类型之间的相等比较
1 | var a='42'; |
规范:
1.如果Type(x)是布尔类型,则返回ToNumber(x)==y的结果
2.如果Type(y)是布尔类型,则返回x==ToNumber(y)的结果
这个结果是错误的,因为’42‘本身是真值,要避免==true,==false
1 | var a='42'; |
null和undefined之间的相等比较
规范:
- 如果x为null,y为undefined,则结果为true
- 如果x为undefined,y为null,则结果为true
因此判断a是否是null或者undefined时直接判断a==null即可
对象和非对象的相等比较
规范:
- 如果Type(x)是字符串或者数字,Type(y)是对象,则返回x==ToPrimitive(y)的结果
- 如果Type(x)是对象,Type(y)是字符串或数字,则返回ToPrimitive(x)==y的结果
1 | var a=42; |