nodejs判断boolean相等_JavaScript 相等 判断探索

这篇博客探讨了JavaScript中相等性判断的细节,包括严格相等(===)、宽松相等(==)和Object.is()的区别。文章指出,===和Object.is()在类型转换上有所不同,尤其是在处理+0, -0和NaN时。==涉及到类型转换,可能导致一些预期之外的结果,建议尽可能使用严格相等。文章通过实例解释了各种情况下的相等判断,并提醒开发者注意潜在的陷阱。" 133393474,19673915,易联云:一款强大的云打印解决方案,"['编程', '云服务', '打印机集成', 'API开发', '软件工具']
摘要由CSDN通过智能技术生成

77d2abc4d8dba69b74b5e86e11ea3afb.png

js中相等性判断探索

最近发现一个比较神奇的问题如下

[] == false   // true
!![] == true  // true

一脸懵逼中。。。

那么,现在就来从开始探索一下这道题的原理

js比较操作

js提供了三中不同的比较操作,分别是:

* 严格相等 ("triple equals" 或 "identity"),使用 ===

* 宽松相等 ("double equals") ,使用 ==

* ES6新出的Object.is()

说一下几种操作的特点与不同。首先,使用=== 与Ojbect.is()进行比较时,是不会进行类型转换的,先判断两边的数据类型,如要两边的数据类型不同,就会直接返回false,再判断数据的值是否相同,这里有个坑点就是对于Number,=== 与Ojbect.is()在处理+0, -0, 与NaN方面有一些不同之处,如下

+0 === -0  // true
Object.is(+0, -0) // false

NaN === NaN // false
Object.is(NaN, NaN) // true

再来说一下==,这个因为涉及到了类型的转换,比较复杂一些。

* 相等操作符比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。

* 理解一下两个方法,ToNumber(A),是指在比较前将A转为数字,与 +A(单目运算符+)的效果相同。ToPrimitive(A), 是指通过调用A.toString()或者A.valueOf()方法将A转为原始值(primitive)

然后来看一下表格

29cc673a13dd48f3d3b799dbd2a9710e.png

可知:

1、Undefined 和 Null:一般情况下,他们只和自身及对方相等,其他情况都会返回false。有个IsFalsy()看起来很奇怪,对象不都应该是返回true么,有啥好判断的?还真不是……有些浏览器会允许一些特殊的对象,如:document.all 等,在某些情况下(相等操作符等)充当undefined的角色,所以,他就会返回false。都是坑爹呢这是……

2、Number: 想与Numbr进行对比,二话不说,你先转成number再BB

3、Boolean:刚想与Boolean做比较,额,他倒是先转成Number了,得嘞,走上了与Number比较的老路

4、Object:可能因为Object比较杂,所以需要先通过ToPrimitive()去找到他的真身以后再进行比较

5、String:优先级最低,因为留给他的对手不多了,一般都是被迫转型,除非对手是String或者ToPrimitive()是String

看起来,类型转换机制还挺复杂的,所以,一般情况下,能用 === 的就尽量不要用 == 了,免得掉进了自己的坑里。什么,非要用==不可?好吧,来看看一下几个案例:

"0" == false; // true
false == 0;  // true 
false == "";  // true
false == [];  // true 
"" == 0;  // true 
"" == [];  // true 
0 == [];  // true 

如果以上这些情况你都能理解,嗯,你可以放心的用==了。

最后,祝大家好运~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值