这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战
前言
今天来谈一个在javaScript中很有意思的现象,就是JavaScript中为什么"null==0"为false而"null>=0"为true的现象
。
众所周知,在JavaScript中,==
表示等于,它判断值相等之后,并不再判断类型。即使值不同,但是转换后的类型相等也会判定为相等。进行一个隐式类型转换,然后才比较,比如1=='1'
、1==true
、0==false
等就是正确的。
而 ===
表示全等于,它不仅仅判断值是否相等,还会判断类型是否相等,并且它不会进行隐式类型转换,比如1==='1'
、1===true
、0===false
等就是错误的。
但是按这个思路来说,null和0应该是相等的才对,为什么会出现null>=0
为true
的情况呢?
分析
让我们针对以下三种情况来分析一下就豁然开朗啦!
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。
知识点(划重点)
关系运算符 和 相等运算符 并不是相同类别的,它们有着完全不同的运算逻辑。
关系运算符,在设计上总是需要运算元素先尝试转为一个number,而相等运算符在设计上,则不会有这方面的考虑,主要是值是否相等。
后记
你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。
关注我,前端路途一起走。嘿哈~😛