== 与 ===
我们都知道两者区别在于,检查值是否相等,而=检查值和类型是否相等。更精确点就是==检查的是允许类型转换情况下的值的相等性,===检查不允许类型转换情况下的值的相等性。
== 类型转换细节
我总结了==中几点重要的特例,如果想看全部细节可以到 es5规范 11.9.3。
对于x == y来说
- 当x,y类型相等时,x == y 与 x === y没有区别。
- 模糊了null和undefined,即 null == undefined 结果为true。
- 当x为Boolean时,会将x转为Number 即 ToNumber(x) == y;
true == 1 //true
'1' == true //true
true ==99 //false
0 == false//true
false =='0' //true
- 当x为String,y为Number,会将x转为Number,即 ToNumber(x) == y; 相反也成立
- 当x,y都为引用类型,只会简单的比较引用地址
var a=[1,2,3];
var b=[1,2,3];
var c="1,2,3";
a ==b //false
a === b //false
- 数组默认情况下会转换为字符串
var a=[1,2,3];
var b=[1,2,3];
var c="1,2,3";
a == c //true
b == c //true