JavaScript的==和===运算符

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;//truespa

相关文章
相关标签/搜索