JavaScript提供两个相等运算符:==和 ===。
     简单说,它们的区别是相等运算符( ==)比较两个值是否相等,严格相等运算符( ===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符( ===)直接返回 false,而相等运算符(==)会将它们转化成同一个类型,再用严格相等运算符进行比较。
 
      * 等于运算符运算规则
      对于一个等于表达式: x==y
     1.当x 和y为同一类型时:
)如果x的类型是 undefined,则返回true ;
)如果x的类型是 null,则返回true ;
)如果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;
)如果x的类型是 string,则只有当x 和y为同样的字符串(相同长度和相同字符在相应的位置)时,返回 true,否则返回false
)如果x类型是 boolean类型,则只有当x和 y同时为 true或者同时为false 时,返回true,否则返回 false;
)当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

JavaScript的==和===运算符的更多相关文章

  1. (转)JavaScript中的运算符优先级

    JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...

  2. JavaScript基础——使用运算符

    JavaScript运算符允许你改变一个变量的值.你已经熟悉了用于赋值给变量的=运算符.JavaScript提供了几种不同的运算符,它们可以划分为两大类:算数运算符和赋值运算符. 1.算数运算符 你可 ...

  3. JavaScript中“typeof”运算符与“instanceof”运算符的差异

    在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了 ...

  4. JavaScript中的运算符种类及其规则介绍

    JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...

  5. JavaScript 基本语法 -- 运算符的优先级

    在所有的运算里,都是有运算顺序的.小时候学四则运算的时候,我们都知道这么一个规则:先乘除后加减,有括号要先算括号! 同样的,在JavaScript里面,运算符也是有相应的优先级的.其优先级如下表所示, ...

  6. JavaScript中逗号运算符

    JavaScript中逗号运算符(,)是顺序执行两个表达式.使用方法: expression1, expression2 其中expression1是任何表达式. expression2是任何表达式. ...

  7. JavaScript学习系列7 -- JavaScript中的运算符

    今天,我们来说一说JavaScript中的运算符,首先我们来讲一讲 一元运算符 JavaScript中的一元运算符有以下几种 1. delete delete 运算符主要用于删除对以前定义的对象属性或 ...

  8. 【废弃中】JavaScript 式与运算符

    创建: 2017/09/25 更新: 2019/01/14 修改标题 [JavaScript 式与运算符] ->  [JavaScript 式与主要Object的方法] 更新: 2019/02/ ...

  9. JavaScript按位运算符~

    1. JavaScript按位运算符 Bit operators work on 32 bits numbers. 2. JavaScript按位运算符~ 值得注意的是,在JavaScript中,~5 ...

  10. JavaScript权威设计--JavaScript表达式与运算符,语句(简要学习笔记六)

    1.delete是一元操作符,用来删除对象属性或者元素. var a={ x:1, y:2 } delete a.x; //删除x属性 “x”in a //false:a对象中已经不存在x属性 ale ...

随机推荐

  1. Struts2 验证码图片实例

    本文转载于DongLiYang的博客http://www.cnblogs.com/dongliyang/archive/2012/08/24/2654431.html 其中修改过一部分,针对使用注解而 ...

  2. CORS详解

    介绍 由于同源策略的缘故,以往我们跨域请求,会使用诸如JSON-P(不安全)或者代理(设置代理和维护繁琐)的方式.而跨源资源共享(Cross-Origin Resource Sharing)是一个W3 ...

  3. [Network Analysis] 复杂网络分析总结

    在我们的现实生活中,许多复杂系统都可以建模成一种复杂网络进行分析,比如常见的电力网络.航空网络.交通网络.计算机网络以及社交网络等等.复杂网络不仅是一种数据的表现形式,它同样也是一种科学研究的手段.复 ...

  4. Codeforces Round #385(div 2)

    A =w= B QwQ C 题意:n个点m条边的无向图,其中有k个特殊点,你在这张图上尽可能多的连边,要求k个特殊点两两不连通,问最多能连多少边 分析:并查集 对原图做一次并查集,找出特殊点所在集合中 ...

  5. Redis的三种启动方式

    转载:http://www.tuicool.com/articles/aQbQ3u Part I. 直接启动 下载 官网下载 安装 tar zxvf redis-2.8.9.tar.gz cd red ...

  6. 修改 jquery.validate.js 支持非form标签

    尝试使用markdown来写一篇blog,啦啦啦 源代码传送门:github 在特殊情况下我们使用jquery.validate.js对用户输入的内容做验证的时候,表单并不是一定包含在form之中,有 ...

  7. 提高前端开发效率必备AngularJS (基础)

    简介 AngularJS 是一个为动态WEB应用设计的结构框架,提供给大家一种新的开发应用方式,这种方式可以让你扩展HTML的语法,以弥补在构建动态WEB应用时静态文本的不足,从而在web应用程序中使 ...

  8. ngrok反向隧道--获取内网IP

    ngrok反向隧道 前情提要:小明与小白各有一台主机,两台主机在同一内网,小明想直接通过内网ssh到小白的主机上.但是小白的ip地址会不断的变化,而小明不想每次都要麻烦小白查看ip.于是小明催生了一个 ...

  9. div的水平和垂直居中

    CSS实现div的水平居中 div的水平居中可以通过margin设置为0 auto实现. .myDiv { width: 200px; height: 100px; margin: 0 auto; } ...

  10. 小尝试一下 cocos2d

    好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...