为了账号安全,请及时绑定邮箱和手机立即绑定

今天在手机上看到的一个问题,为什么结果是这样?

今天在手机上看到的一个问题,为什么结果是这样?

GCT1015 2023-04-14 19:15:37
null==0 //falsenull>0 //falsenull<0 //falsenull>=0 //true
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

js是遵从ECMAScript规范的,出现上面问题的原因是因为关系运算符会胁迫类型转换。

首先要明确一点,typeof(null)=='object'。然后问题分两部分回答吧,先说false的三个:

null==0 //falsenull>0 //falsenull<0 //false

在x与y之间使用= =时,会判断“如果x为object,y为字符串或数字”的情况,这时候会返回ToPrimitive(x) = =y,也就是ToPrimitive(null)==0,null会根据输入的参数0(Number)转换为原始值,这时候是null转化为undefined,>号与<号的转换情况也是一样的,因此出现了false。

undefined==0//falseundefined>0//falseundefined<0//false

true的情况则是null在>=时,通过GetBase和GetPropertyName转换为了0,因此

0>=0//true

这些东西其实挺纠结的说,还是得看ECMAScript的规则。


查看完整回答
反对 回复 2023-04-17
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

1. 关系运算符 和 相等运算符 并个类别的

2. 关系运算符,在设计上,总是需要运算元尝试转为一个number . 而相等运算符在设计上,则没有这方面的考虑

3. 最重要的一点, 不要把 拿 a > b , a == b 的结果 想当然的去和 a >= b 建立联系. 正确的符合最初设计思想的关系是 a > b 与 a >= b是一组。a == b 和其他相等运算符才是一组. 比如

a === b , a != b, a !== b
null > 0 //  null 尝试转型为number , 则为0 . 所以结果为 false, 
null >= 0 //  null 尝试转为number ,则为0 , 结果为 true. 
null == 0 // null在设计上,在此处不尝试转型. 所以 结果为false.


查看完整回答
反对 回复 2023-04-17
  • 2 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信