JavaScript中的相等操作符分为两组,一组是相等(==)和不相等(!=),一组是全等(===)和不全等(!==)。
1 相等(==)和不相等(!=)
相等和不相等操作符在比较的时候,会对比较的操作数进行强制转型,即先转换再比较。它遵循以下的基本规则:
1. 如果有一个操作数为布尔值,则在比较相等性之前先将其转换为数值——false为0,true为1;
2. 如果有一个操作数为字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
3. 如果有一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型按照前面的规则进行比较;
相等和不相等操作符在比较时还需要遵循以下的规则:
1. null和undefined不会进行强制转换,如
undefined == 0 //返回false
undefined不会被强制转换为0,因此比较结果返回false。
2. null和undefined是相等的,即
null == undefined //返回ture
3. 如果有一个操作数是NaN,则相等操作符返回false。即使两个操作数都是NaN,返回结果也是false。即
"NaN" == NaN //返回false
NaN == NaN //返回false
4. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false。
2 全等(===)和不全等(!==)
全等和不全等操作符在比较的时候不会进行操作数的转换,来看下面的例子:
"55" == 55 //返回true
"55" === 55 //返回false
另外,null和undefined在相等操作符比较下,返回true,因为它们是类似的值。但是在全等操作符比较下,返回false,因为它们是不同类型的值,即:
null == undefined //返回true
null === undefined //返回false