zoukankan      html  css  js  c++  java
  • 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;//true

  • 相关阅读:
    Kubernetes CNI 发展趋势- iptables_ipvs_bpf_ovs
    《设计模式:可复用面向对象软件的基础》之单例模式
    《设计模式:可复用面向对象软件的基础》之策略模式
    Rancher On K3s 高可用架构部署
    学习计算机的体会与认识
    结对编程1-模块化
    个人作业——APP案例分析
    四则运算——二叉树
    IDEA使用Visual Studio的快捷键配置
    【Java学习笔记】写第一个HelloWorld程序,命令行程序
  • 原文地址:https://www.cnblogs.com/wqhwe/p/5670572.html
Copyright © 2011-2022 走看看