首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

137-重温基础:相等性判断

本文是重温基础系列文章的第十八篇。今日感受:优化自己的代码,也是很愉快的事情。

本章节复习的是JS中的关于严格相等和非严格相等的一些知识。

前置知识:

判断两个变量的值是否相等,是编程中非常重要的一个操作。这里我们心里面先有两组对照,思考下:

相等 和 不相等

全等 和 不全等

1.介绍

在我们比较字符串、数值和布尔值的相等性,是比较简单的,但是到了比较对象的时候,问题就比较复杂。

早期的时候ECMAScript规范中,在判断相等和不相等时,会先将对象转换成相似的类型,再执行比较。后面有人质疑其合理性,最后ECMAScript提出解决方法:提供两组操作符:

相等不相等(宽松相等):先转换再比较,使用

全等不全等(严格相等):仅比较不转换,使用

另外还有一类ES6新增的方法:

(ES6新增)

2.相等和不相等

JavaScript中用相等操作符使用 进行比较,若两个操作数相等,则返回 ,否则返回 。反之,不相等操作符使用 。

这两个操作符都会先转换操作数类型,再进行比较

通常在转换不同数据类型时,相等和不相等会遵循以下规则:

若有一个操作数是布尔值,则比较前会将布尔值转换为数值: 转为 , 转为 。

若一个操作数是字符串,另一个是数值,则比较前会将字符串转换为数值

若一个操作数是对象,另一个不是,则比较前会调用 方法,用返回的基本类型值来判断。

两个操作符进行比较时会遵循下面规则:

和 相等。

比较前不能讲 和 转换成其他值。

若一个操作数是 ,则不相同( 时返回 , 时返回 )。

若两个操作数是 ,则不相同( 时返回 , 时返回 )。

若两个操作数都是 ,则比较它们是不是同一个对象。

若两个操作数都指向同一个 ,则相等操作符返回 ,否则返回 。

下面列出一些特殊情况的比较 :

3.全等和不全等

除了比较前不转换操作数歪,全等和不全等与相等和不相等并无区别,但使用的是 ,只有当不转换的情况下两个操作数相同,才会返回 。

不全等操作符就相对应的使用 :

特殊的:

由于相等和不相等操作符存在类型转换问题,因此为了保持代码中数据类型的完整性,我们推荐使用去哪等和不全等操作符。

4.同值相等(Object.is)

,传入两个需要对比的值。

判断两个值是否相同,并且不会对参数进行类型转换。如果下列任何一项成立,则两个值相同:

两个值都是

两个值都是

两个值都是 或者都是

两个值是由相同个数的字符按照相同的顺序组成的字符串

两个值指向同一个对象

两个值都是数字并且

都是正零

都是负零

都是

都是 和 外的其它同一个数字

另外还有特殊的:

零值相等:

与同值相等类似,不过会认为 与 相等。

5.对比图

相等操作符对于不同类型的值,进行的比较如下图所示(来源 MDN):

注意:

表示比较前将参数 转换为数字

通过尝试调用 的 和 方法,将参数 转换为原始值(Primitive)。

参考文章:

MDN JavaScript 中的相等性判断

JavaScript高级程序设计

本部分内容到这结束

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190213G0458W00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券