JavaScript 提供两个相等运算符: == 和 === 。
简单说,它们的区别是相等运算符( == )比较两个值是否相等,严格相等运算符( === )比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符( === )直接返回 false ,而相等运算符( == )会将它们转化成同一个类型,再用严格相等运算符进行比较。
* 等于运算符运算规则
对于一个等于表达式: x==y
1. 当 x 和 y 为同一类型时:
( 1 )如果 x 的类型是 undefined ,则返回 true ;
( 2 )如果 x 的类型是 null ,则返回 true ;
( 3 )如果 x 的类型是 number ,则
a. 如果 x 是 NaN ,则返回 false
b. 如果 y 是 NaN ,则返回 false
c. 如果 x 是和 y 数值一样的 number ,则返回 true
d. 如果 x 是 +0 , y 是 -0 ,则返回 true
e. 如果 x 是 -0 , y 是 +0 ,则返回 true
f. 其它情况则返回 false ;
( 4 )如果 x 的类型是 string ,则只有当 x 和 y 为同样的字符串(相同长度和相同字符在相应的位置)时,返回 true ,否则返回 false
( 5 )如果 x 类型是 boolean 类型,则只有当 x 和 y 同时为 true 或者同时为 false 时,返回 true ,否则返回 false;
( 6 )当 x 和 y 指向同一个对象时,返回 true ,否则返回 false ;
2. 当 x 为 null , y 为 undefined ,返回 true ;
3. 当 x 为 undefined , y 为 null ,返回 true ;
4. 当 x 为 number 类型, y 为 string 类型时,返回 ToNumber(x) == y 的比较结果;
5. 当 x 为 string 类型, y 为 number 类型时,返回 x== ToNumber(y) 的比较结果;
6. 当 x 的类型为 boolean 类型时,返回 ToNumber(x) == y 的比较结果;
7. 当 y 的类型为 boolean 类型时,返回 x== ToNumber(y) 的比较结果;
8. 如果 x 是 string 类型或者是 number 类型, y 是对象,则返回 x == ToPrimitive(y) 的比较结果 ;
9. 如果 x 是对象 ,y 是 string 类型或者是 number 类型,则返回 ToPrimitive(x) == y. 的比较结果 ;
10. 其它情况,则返回 false 。
注: 在 [] == 0 或者 [] == false 的时候,空数组被转换成了0。但是如果直接使用 if([ ]){ } 的时候, 空数组又被认为是true的。
eg:Boolean([])==true;//true
[]==0;//true []==false;//true []==true;//false Boolean('0')==true;//true "0"==true;//false 0==null;//false 0==false;//true Boolean(null)==false;//true null==true;//false null==false;//false Boolean(undefined)==false;//true undefined==true;//false undefined==false;//false Boolean({})==true;//true ({})==true;//false ({})==true;//false *严格等于运算符运算规则
对于一个等于表达式: x===y
(1)如果x和y的类型不同,则返回false;
(2)如果x的类型 为undefined,则返回true;
(3)如果x的类型为Null,则返回true;
(4)如果x的类型为Number,则
a.如果x为NaN,则返回false;
b.如果y为NaN,则返回false;
c.如果x是和y一样的Number类型,且数值相同,则返回true;
d. 如果 x 是 +0 , y 是 -0 ,则返回 true;
e. 如果 x 是 -0 , y 是 +0 ,则返回 true;
f.其它情况返回false;
(5)如果x的类型为string,只有当x和y都为string类型,且具有 相同长度和相同字符在相同的位置,则返回true,否则返回false;
(6)如果x为boolean类型, 则只有当 x 和 y 同时为 true 或者同时为 false 时,返回 true ,否则返回 false;
(7) 当 x 和 y 指向同一个对象时,返回 true ,否则返回 false ;
eg:({}==={});//false
[]===[];//false (function (){} === function (){});//false null===null;//true undefined===undefined;//true NaN === NaN;//false var v1 = {}; var v2 = v1; v1 === v2;//true