先抛出问题
null == 0 // false
null > 0 // false
null >= 0 // true
恭喜都答对的同学,可以撤了,你已经掌握了;但是继续看完加深理解也不错呀~
没答对的同学,我们还是老实的看看这是咋回事呢?
逐一分析
null == 0
按照一贯的思路,在使用 ==
进行对比时,如果一侧是 number
类型的数据,则会将非 number
类型的数据转为 number
,然后在进行比较,我们就可以得出一下结论:
null == 0;
// 进行类型转换
(null = 0 + null) == +0;
// 得到
0 == 0;
// 最终结果得到 true
true;
但是事实并非如此🥲
根据对应的规范,数字转换实际上并没法发生在 null
或 undefined
的一侧。如果在等号的一侧有 null
或 undefined
,则另外一侧的表达式必须是 null
或 undefined
,才会返回 true
。所以,正确的结果是:
null == 0 // false
undefined == 0 // false
// 只有几种情况才会返回 true
null == undefined // true
null == null // true
undefined == undefined // true
null > 0
先看结果,这题相信大家都能答对,但是还是得来解析一下过程,加深印象哈~
null > 0 // false
这里的操作不同于上面的 ==
的操作,这里会将 null
转为数字,然后在进行比较。
null > 0
+null > +0
0 > 0
false
null >= 0
看到这个,大家的第一映象可能是 null == 0 || null > 0
, 既然 null == 0
是 false
,null > 0
也是 false
,那结果肯定是 false
。但是事实却是:true
,简直就是 wtf~
null >= 0 // true
实际上 >=
以一种非常不同的方式工作,这基本上与 <
操作符相反,因此可以这样子去理解这个过程:
null >= 0
// 直接反着来,接着和 null > 0 一样的过程
!(null < 0)
!(+null < 0)
!(0 < 0)
// 最后得出结果取反
!(false)
true
参考
写在最后
小前端一枚,不生产代码,只是代码的搬运工,当然也希望能对大家有所帮助(●>ω<●)。