判断两个变量是否相等是程序设计中非常重要的运算。在处理原始值时,这种运算相当简单,但设计对象,任何就稍微有点复杂。JavaScript提供了两套运算符处理这个问题,等号和非等号用户处理原始值;全等号和非全等号用于处理对象。
在JavaScript中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回true。非等号是感叹号加等号(!=),当且仅当两个运算数不相等时,它返回true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。
执行类型转换的基本规则如下:
如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。
如果一个运算数是字符串,另一是数字,在检查相等性之前,要尝试把字符串转换成数字。
如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串(调用toString()方法)。
如果一个运算数是对象,另一是数字,在检查相等性之前,要尝试把对象转换成数字。
在进行比较时,该运算符还遵守下列规则:
值null和undefined相等。
在检查相等性时,不能把null和undenfined转换成其他值。
如果某个运算数是NaN,等号将返回false,非等号将返回true。重要提示:即使连个运算数都是NaN,等号仍然返回false,因为根据规则,NaN不等于NaN。
如果两个运算数都是对象,那么比较的是他们的引用值。如果两个运算数指向同一个对象,那么等号返回true,否则两个运算数不等。
下面的比较列出了一些特殊的情况以及它们的结果:
null == undefined //结果为:true
"NaN" == NaN //结果为:false
5== NaN //结果为:false
NaN == NaN //结果为:false
NaN != NaN //结果为:true
false == 0 //结果为:true
true == 1 //结果为:true
true == 2 //结果为:false
undefined == 0 //结果为:false
null == 0 //结果为:false
"5" == 5 //结果为:true