JavaScript中为什么“null==0“为false?? “null>=0“为true???

1,108 阅读2分钟

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

前言

今天来谈一个在javaScript中很有意思的现象,就是JavaScript中为什么"null==0"为false而"null>=0"为true的现象

众所周知,在JavaScript中,==表示等于,它判断值相等之后,并不再判断类型。即使值不同,但是转换后的类型相等也会判定为相等。进行一个隐式类型转换,然后才比较,比如1=='1'1==true0==false等就是正确的。

===表示全等于,它不仅仅判断值是否相等,还会判断类型是否相等,并且它不会进行隐式类型转换,比如1==='1'1===true0===false等就是错误的。

但是按这个思路来说,null和0应该是相等的才对,为什么会出现null>=0true的情况呢?

分析

让我们针对以下三种情况来分析一下就豁然开朗啦!

null > 0

对比大于或小于的时候,null 会尝试转型为number , 转化之后null为0, 而0>0很明显是错误的,所以结果为 false。

null >= 0

同上,对比 大于等于 或 小于等于 的时候, 会先判断大于或小于, 这时候null 会尝试转型为number , 转化之后null为0, 0>0是错误的,但是0=0是正确的, 这是 "或" 的判断, 所以结果为 true。

null == 0

相等运算符在设计上,对比等于的时候并不会尝试转型,null不会转换为0,同样的,0也不会转为null。null和0不转型的话,是不会相等的, 所以null == 0结果为false。

知识点(划重点)

  1. 关系运算符 和 相等运算符 并不是相同类别的,它们有着完全不同的运算逻辑。

  2. 关系运算符,在设计上总是需要运算元素先尝试转为一个number,而相等运算符在设计上,则不会有这方面的考虑,主要是值是否相等。

后记

你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。

关注我,前端路途一起走。嘿哈~😛