javascript基础的==和===底层原理解析

今天心血来潮在控制台打了这个js语句,看看执行结果,本来觉得在意料之中,可是输出结果出乎我的意料


或许在很多人的脑海里,undefined、null、false等都是表示否定的意思,所以它们的逻辑等是相等的,这就打脸了
后来查看了资料,总结出了JavaScript的==和 ===的比较规则

逻辑等(==)

在比较之前,==的两个操作符都会进行强制类型转换
在转换不同的数据类型时,== 和 != 操作符遵循系列基本的原则

1、如果有一个操作数时布尔值,则在比较相等性之前先将其转换为数值,即是调用Number()函数

2、如果一个操作数是字符串,另一个数时数值,在比较相等性之前先将字符串转换为数值;同理底层是Number()函数

3、如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型按照前面的规则进行比较

以上是类型转换时遵循的原则,在转换成基本数据类型以后,会出现两边都是同个类型和不同类型的情况,在进行比较时又遵循以下的原则

1、null 和 undefied 是相等的,这是js的规定,但是其实在底层,undedined的值是派生自null的,所以逻辑等时要返回true

2、如果有一个操作数时NaN,则返回false(NaN不与任何操作符逻辑等或全等,包括NaN)

3、如果两个操作符都是对象,则比较它们是不是同一个对象,则返回true,否则返回false


根据上面的规则,再回过头来看看上面的那几个例子

undefined == false

根据转换规则1,调用Number()方法将其转换为数值类型

根据上面结果,则转换为 NaN == 0 ,根据比较规则2,NaN不与任何操作符逻辑等,则返回false


null == false

Number(null) == Number(false) => 0  == 0  => true  //这是不行的

可在控制台输出的是false啊?这只能说是js的特殊情况了,就像null == undefined一样,同样存在下列的特殊情况

null == 0  //false

null == false //false

true == 2 //false 因为Number(true)返回的是1


undefined == null 

这个上面有提到了,情况比较规则1


全等和不全等

它是在两个操作数未经类型转换就相等的情况下返回true

undefined === null

这就容易解释了,undefined 和 null 都是不同类型,都是五种(ES6之后六种了,增加了Symbol)基本类型之一 ,所以为false





  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值