JS中==的判断原理

JS中的==运算符在比较时会进行类型转换,遵循特定的规则。如当一个操作数是false时,会转为0再与其他类型比较。如果另一操作数是字符串、数字、null、undefined或对象,则分别按不同规则转换或比较。对于两个对象,只有当它们指向同一对象时才相等。null和undefined总是相等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS中==的判断原理

判断规则

遇到两个操作数不同类型时会先尝试着转换成相同的类型再比较,其转换规则如下:

1、只要有一个操作数是布尔值,则先将该布尔值转成数字类型,(false => 0, true => 1);

2、如果一个操作数是字符串,另一个是数字类型,则把字符串转成数字类型;

3、有一个操作数是对象的话,另一个不是,则尝试着将对象转成基本类型值。(一般情况下会依次调用valueOf,和toString,只要能得到基本类型值即可);

4、两个操作数都是对象的话,则比较它们是不是指向同一个对象即可;

5、操作数是null 或 undefined 的话不进行转换;

每条规则之间都是一定的联系的。

如果有一个操作数是 false,那么另一个操作数就是 字符串,数字类型,null,undefined,对象的其中一种(当然也可能也是布尔值),这时匹配到第1条规则,二话不说先将false转成数字0,那么就变成了下面这几种可能的情况:

0 == 字符串 (匹配到第2条规则)
0 == 数字类型 (直接比较了)
0 == null,undefined (匹配到第5条规则)
0 == 对象 (匹配到第3条规则)
每条规则都可能是由其他规则推算出来的,每一条规则并非都是独立的,JS规定null和undfined永远相等,因为undfined是null衍生出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值