博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript的==和===运算符
阅读量:4659 次
发布时间:2019-06-09

本文共 2378 字,大约阅读时间需要 7 分钟。

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

转载于:https://www.cnblogs.com/wqhwe/p/5670572.html

你可能感兴趣的文章
C语言预处理条件语句的 与或运算
查看>>
D1图论最短路专题
查看>>
.Net core的日志系统
查看>>
shell脚本颜色的设置
查看>>
2019春总结作业
查看>>
小程序数据绑定的拓展用法
查看>>
DRF 版本 认证
查看>>
MVC 4将jQuery升级到1.9出现各种问题。。。
查看>>
JedisPool资源池优化
查看>>
第2次作业+105032014140
查看>>
JS防抖与节流
查看>>
redhat enterprixe 5.0 DNS 服务配置与管理
查看>>
Django ORM不完全操作
查看>>
hdu2089
查看>>
windows下使用PHP实现定时执行脚本
查看>>
Linux下常用的压缩与解压命令
查看>>
第一周的博客作业
查看>>
linux的awk命令解读
查看>>
JavaScript内部原理实践——真的懂JavaScript吗?(转)
查看>>
android5.0之toolBar
查看>>