JavaScript 中为什么“null==0“为 false?? “null>=0“为 true???
前言
今天来谈一个在 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,而相等运算符在设计上,则不会有这方面的考虑,主要是值是否相等。
后记
你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。
关注我,前端路途一起走。嘿哈~😛
版权声明: 本文为 InfoQ 作者【南极一块修炼千年的大冰块】的原创文章。
原文链接:【http://xie.infoq.cn/article/60e3d5d577a816f1b124a8c2a】。文章转载请联系作者。
评论