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. LA 3231 - Fair Share

    You are given N processors and M jobs to be processed. Two processors are specified to each job. To ...

  2. 8个排序算法——java

    public static void radixsort(int[] a){ int max=a[0]; for(int i=1;i<a.length;i++){ if (max<a[i] ...

  3. 开发 ASP.NET vNext 初步总结(使用Visual Studio 14 CTP1)

    新特性: vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存). 可以self-host模式 ...

  4. Deconvolution Using Theano

    Transposed Convolution, 也叫Fractional Strided Convolution, 或者流行的(错误)称谓: 反卷积, Deconvolution. 定义请参考tuto ...

  5. Ubuntu下运行Shell脚本

    将一个脚本保存为带有扩展名的文件,如test.sh, 在终端上输入: chmod +x test.sh 然后输入: test.sh 终端显示: test.sh 找不到命令(后来看了鸟个私房菜,发现这样 ...

  6. 【hrbust2293】棋盘村

    题意 哈理工2016级新生程序设计全国邀请赛A题 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&probl ...

  7. 在Arcscene绘制管线三维横断面(AE绘制三维点阵文字)

    根据数据信息动态生成三维管线及横断面表格.效果图如下: 在获取信息后,直接构造点阵进行文字绘制即可. 绘制IElement代码: /// <summary> /// 绘制三维文字 /// ...

  8. 全局变量都是window对象的属性

    var x = "haha"; var test  = function(){ alert(this.x); } 上述,则会弹出 haha的值. 因为在JavaScript的变量作 ...

  9. ssh key生成

    Mac电脑用终端生成SSH key 访问自己的Github 字数684 阅读427 评论4 喜欢15 前言:最近有不少刚刚使用github管理代码的开发者或者新手码农在网上 问我如何关联自己的gith ...

  10. 偷懒小工具 - Excel导出公共类

    说明 最近接了一个任务,就是做一个列表的Excel导出功能.并且有很多页面都会使用这个功能. 导出的Excel大体格式如图 很简单的列表,标题加背景色,然后不同类型,显示方式不一样.对齐方式不一样.不 ...