测了我好半天
// 虽然只是for循环
先来确定有哪些空值
我们通过 ** if ** 来验证下候选值的真伪(最后一个纯属搞笑
NaN | undefined | null | false | 0 | -0 | ‘’ | [] | ‘false’ |
---|---|---|---|---|---|---|---|---|
X | X | X | X | X | X | X | 是 | 是 |
那么能明确至少有七个值是空的,其实还有一个真“空”
比如
1 | Boolean(NaN) //false |
都是空的
而 Boolean() 也为“空”,这就是第八空“真空”
判断空数组返回真值倒是在意料之外,不过一般也不会进行这样的判断就是了,直接 [].length 就猴了
然后我们就来比较吧
先是双等号的情况:
== | NaN | undefined | null | false | 0 | -0 | ‘’ | [] | ‘false’ |
---|---|---|---|---|---|---|---|---|---|
NaN | X | X | X | X | X | X | X | X | X |
undefined | X | 是 | 是 | X | X | X | X | X | X |
null | X | 是 | 是 | X | X | X | X | X | X |
false | X | X | X | 是 | 是 | 是 | 是 | 是 | X |
0 | X | X | X | 是 | 是 | 是 | 是 | 是 | X |
-0 | X | X | X | 是 | 是 | 是 | 是 | 是 | X |
‘’ | X | X | X | 是 | 是 | 是 | 是 | 是 | X |
[] | X | X | X | 是 | 是 | 是 | 是 | X | X |
‘false’ | X | X | X | X | X | X | X | X | 是 |
然后是三等号的情况:
=== | NaN | undefined | null | false | 0 | -0 | ‘’ | [] | ‘false’ |
---|---|---|---|---|---|---|---|---|---|
NaN | X | X | X | X | X | X | X | X | X |
undefined | X | 是 | X | X | X | X | X | X | X |
null | X | X | 是 | X | X | X | X | X | X |
false | X | X | X | 是 | X | X | X | X | X |
0 | X | X | X | X | 是 | 是 | X | X | X |
-0 | X | X | X | X | 是 | 是 | X | X | X |
‘’ | X | X | X | X | X | X | 是 | X | X |
[] | X | X | X | X | X | X | X | X | X |
‘false’ | X | X | X | X | X | X | X | X | 是 |
这么快就到总结啦
首先,** 正零 ** 和 ** 负零 ** 在逻辑判断上没有任何区别,而** NaN ** 是超绝缘体和任何值都不等包括自身!
然后 ** null ** 和 ** undefined ** 相似但不完全相等, ** false ** 、** 0 ** 、 ** ‘’ ** 和 ** [] ** 相似但不完全相等
(装作没看到 ** ‘false’ **