js学习笔记:==和===

概览

==和===都是JavaScript中的关系表达式运算符,与对应的还有!=和!==。

==和===运算符主要用于比较两个值是否相等。当然它们对相等的定义不尽相同。两个运算符允许任意类型的操作数,如果操作数相等则返回true,否则返回false。

==和===虽然都是关系表达式运算符,但它们的定义是有所不同的:

  • ==:称作相等运算符(Equality Operator),它用来检测两个操作是否相等,这里的相等的定义非常宽松,可以允许类型的转换
  • ===:称作严格相等运算符(Strict Equality),也被称之为恒等运算符(Identity Operator)或全等运算符,它用来检测两个操作数是否严格相等,不进行类型转换

==和 !=

这两个操作符被称为相等和不相等,会先转换操作数的类型,然后再比较它们的相等性。

在数据类型转换时遵循下列基本规则:

  1. 如果两个操作数的类型相同,则会按照严格相等的比较规则一样
  2. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值:false为0,true为1
  3. 如果有一个操作数为字符串,另一个操作数为数值,则比较之前先将字符串转换成数值
  4. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf方法,用得到的基本类型值按前面的规则进行比较。

发现一个规律就是基本都是其他类型向Number类型转换

这里写图片描述

关于Number类型转换的规则可以参考 js学习笔记:数据类型——Number

在比较时遵循下列规则:

  • 比较相等性之前,不能将null和undefined转换成其他任何值
  • null和undefined是相等的
  • NaN不等于任何其他值,包括它自己。
  • 如果两个操作数都是对象,则比较他们是不是同一对象,如果两个操作数指向同一个对象则返回true,否则返回false

这里写图片描述

先来看一些对象的比较:

var a = [1,2,3];
var b = [1,2,3];
a==b;   //false

var c = {x:1,y:2};
var d = {x:1,y:2};
c==d;   //false

var e = "text";
var f = "te"+"xt";
e==f;   //true

看一些相等比较的例子:

NaN != NaN //true
true == 2 //false
undefined == 0 //false
null == 0 //false
"5" == 5 //true

===和 !==

在比较前不转换操作数,因此只有类型相同的操作数才会继续比较具体值。

其在比较时遵循的规则如下:

  • 如果两个值类型不相同,则它们不相等
  • NaN和其他任何值都是不相等的,包括它本身
  • 如果两个引用值指向同一个对象,数组或函数,则它们是相等的。如果指向不同的对象,则它们是不等的,尽管两个对象具有完全一样的属性。

参考资料:
【转载】让你彻底地、永久地搞懂JavaScript的==
JavaScript运算符:== VS. ===

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值