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. 30秒搞定javascript作用域

    引用一下js权威指南的一名话作为开场”JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.” javascript不存在大括号级的作用域,但他有函数作用域,也就是说变量 ...

  2. 详解C#中的反射

    反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到的呢?B超是B ...

  3. 【Quartz】将定时任务持久化到数据库

    之前的文章所做的demo是将定时任务的信息保存在内存中的,见以下配置 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 如果,我们需要在 ...

  4. 使用AccessibilityService执行开机自启动

    res/xml/accessibility_service_config.xml <accessibility-service xmlns:android="http://schema ...

  5. sql server生成递归日期

    WITH Date AS ( SELECT CAST('2008-08-01' AS DATETIME) da UNION ALL FROM Date WHERE da < '2008-08-2 ...

  6. 反序列化漏洞问题研究之php篇

    php的反序列化反序列化漏洞又称php对象注入(php Object Injection)产生的问题主要分以下两类: 将传来的序列化数据直接unserilize,造成魔幻函数的执行.这种情况在一般的应 ...

  7. Git原理及常用操作命令总结

    git原理介绍及操作 git 原理——

  8. Git忽略.gitignore规则不生效的解决办法

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件). 这个文件每一行保存了一个匹配的规则例如: # 此为 ...

  9. cocoapods安装

    什么是cocoapods CocoaPods是一个用来帮助我们管理第三方依赖库的工具.它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我 ...

  10. position导致Safari工具栏不自动隐藏

    一般情况下,移动端网页在上滑的时候,Safari的工具栏会自动隐藏掉,下滑的时候又会出现. 但是,如果可滑动区域的最外层box写了position:absolute,就不会自动隐藏了. 例如像这样的页 ...