在涉及到对象的比较时,ECMAScript提供两组操作符:相等和不相等-----先转换再比较,全等和不全等-------仅比较而不转换
1,相等和不相等
ECMAScript中的相等操作符由两个等于号(==)表示,如果两个操作数相等,则返回true,而不相等操作符由叹号后跟等于号(!=)表示,如果两个操作数不相等,则返回true.这两个操作符都会先转换操作数(通常为强制转型),然后再比较它们的相等性.
在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则:
如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值---false转换为0,而true为1;
如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
如果一个操作数是对象,另一个操作数不是,则调用对象的valueof ()方法,用等到的原始值按照前面的规则进行比较;
这两个操作符在进行比较时则要遵循下列规则
null和undefined是相等的
要比较相等性之前,不能将null和undefined转换成其他任何值.
如果有一个操作数是NaN,则相等操作符返回false,而不相等操作符返回true.重要提示:即使两个操作数都是NaN,相等操作符也返回false;因为按照规则,NaN不等于NaN.
如果两个操作数都是对象,则比较它们是不是同一个对象.如果两个操作数都指向同一个对象,则相等操作符返回true,否则,返回false;
特殊情况比较结果:
null == undefined //true
"NaN" == NaN //true
5 == NaN //false
NaN == NaN //false
NaN != NaN //true
false == 0 //true
true == 1 //true
true == 2 //false
undefined == 2 //false
null == 0 //false
"5" == 5 //true
2全等和不全等
除了在比较之前不转换操作数之外,全等和不全等操作符与相等和不相等操作符没有什么区别
全等操作符由3 个等号(===)表示,它只在两个操作数未经转换就相等的情况下返回true,
"55" == 55; //true
"55" === 55; //false
在这个例子中,第一个比较使用的是相等操作符比较字符串"55"和数值55,结果返回了true.如前所述,这是因为字符串"55"先被转换成了数值55,然后再与另一个数值55进行比较.第二个比较使用了全等操作符,以不转换数值的方式比较同样的字符串和值.在不转换的情况下,字符串当然不等于数值,因此结果就是false.
不全等操作符由一个叹号后跟两个等号(!==)表示,它在两个操作数未经转换就不相等的情况下返回true.
由于相等和不相等操作符存在类型转换问题,而为了保持代码中数据类型的完整性,我们推荐使用全等和不全等操作符