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. 跨应用使用Spoon框架截图的方法

    spoon框架是一个很棒的用例驱动跟测试结果生成加工的框架.但在使用spoon-client时,传入参数需要被测应用的activity实例,跨应用测试会很受限(当然也可能是因为我对android不熟导 ...

  2. firefox 使用svg的image标签无法显示图片

    在image标签上添加 height.width(不要用css属性) href属性前面加xlink: (Mozilla自己的MDN都说不加xlink了,搞鸡巴)

  3. 如何为Surface Dial设备开发自定义交互功能

    随着Surface Studio的发布,微软发布了与之相配套的外设硬件Surface Dial,用户可以将Surface Dail吸附在Surface Studio的屏幕上面,用旋转和点击的实体操作来 ...

  4. redis学习笔记

    Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语 ...

  5. Redux原理(一):Store实现分析

    写在前面 写React也有段时间了,一直也是用Redux管理数据流,最近正好有时间分析下源码,一方面希望对Redux有一些理论上的认识:另一方面也学习下框架编程的思维方式. Redux如何管理stat ...

  6. HYSBZ 2038 莫队算法

    小Z的袜子(hose) Time Limit:20000MS     Memory Limit:265216KB     64bit IO Format:%lld & %llu Submit  ...

  7. 高通vuforia+Unity3D 制作ar app

    很简单就可以用Unity3D做出增强现实的一个小例子 新人第一次写博客,若出现错误望指正^_^ 需要下载de东西: unity3d 5.0 http://unity3d.com/get-unity   ...

  8. 关于我-dinphy简介

    别   名:孜_行 英文名:dinphy QQ交流群:588266650 兴趣爱好:听音乐.打篮球.热衷于诗词文学 专    业:计算机 了    解:windows及Linux.android的基本 ...

  9. oracle Entity db.Database.SqlQuery ORA-01843: 无效的月份

    原因是oracle的日期格式化格式和本地语言环境的日期格式不一致导致的. 一般情景为oralce格式为英文格式 本地服务器或者开发机的环境为中文环境. 使用Dbcontext 实例一般不会有问题. 但 ...

  10. Map工具系列-07-TFS变更集提取工具

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...