JavaScript,NaN/undefined/null/False 等特殊空值判断
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
JavaScript
里面有一些特殊的空值,表面上来看都表示空。在写代码的时候,总是需要对一些异常信息做拦截处理。这个时候就需要做这些空值判断。当然了,传统习惯上,大家会使用双等号或者是三等号进行判断。那么,双等号或者三等号判断,对于这些特殊的空值,还能有作用么?这就是本文要讨论的问题。
苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的编程感悟。本文测试环境:win10
,chrome@116.0.5845.141
,node@16.14.2
。
双等号和三等号
可以点击下面的链接,查看一下对双等号和三等号的结论:
那么,本文中的目标是对这些NaN/undefined/null/false
特殊空值进行判断。使用的最平常的手段还是双等号和三等号。测试代码:
var a1 = a2 = NaN ;
var b1 = b2 = undefined ;
var c1 = c2 = null ;
var d1 = d2 = false ;
var e1 = e2 = 0 ;
console.log( `a1 == a2`, a1 == a2 );
console.log( `b1 == b2`, b1 == b2 );
console.log( `c1 == c2`, c1 == c2 );
console.log( `d1 == d2`, d1 == d2 );
console.log( `e1 == e2`, e1 == e2 );
console.log( `a1 === a2`, a1 === a2 );
console.log( `b1 === b2`, b1 === b2 );
console.log( `c1 === c2`, c1 === c2 );
console.log( `d1 === d2`, d1 === d2 );
console.log( `e1 === e2`, e1 === e2 );
输出:
a1 == a2 false
b1 == b2 true
c1 == c2 true
d1 == d2 true
e1 == e2 true
a1 === a2 false
b1 === b2 true
c1 === c2 true
d1 === d2 true
e1 === e2 true
可以看到:特例就是NaN
,它和自己都不相等。而其它的特殊空值,都可以使用双等号或者三等号,进行判断。
特例一:NaN判断
NaN
和谁都不相等,和自己也不相等。所以,使用双等号或者三等号判断NaN
都是不正确的,应该使用isNan()
进行判断。
var a = NaN ;
console.log( a, isNaN(a) );
console.log( `a == NaN`, a == NaN );
console.log( `a === NaN`, a === NaN );
输出:
NaN true
a == NaN false
a === NaN false
特例二:null双等于undefined
继续进行排查:
var a1 = a2 = NaN ;
var b1 = b2 = undefined ;
var c1 = c2 = null ;
var d1 = d2 = false ;
var e1 = e2 = 0 ;
console.log( `a1 == b1`, a1 == b1 );
console.log( `a1 == c1`, a1 == c1 );
console.log( `a1 == d1`, a1 == d1 );
console.log( `a1 == e1`, a1 == e1 );
console.log( `b1 == c1`, b1 == c1 );
console.log( `b1 == d1`, b1 == d1 );
console.log( `b1 == e1`, b1 == e1 );
console.log( `c1 == d1`, c1 == d1 );
console.log( `c1 == e1`, c1 == e1 );
console.log( `d1 == e1`, d1 == e1 );
console.log( `a1 === b1`, a1 === b1 );
console.log( `a1 === c1`, a1 === c1 );
console.log( `a1 === d1`, a1 === d1 );
console.log( `a1 === e1`, a1 === e1 );
console.log( `b1 === c1`, b1 === c1 );
console.log( `b1 === d1`, b1 === d1 );
console.log( `b1 === e1`, b1 === e1 );
console.log( `c1 === d1`, c1 === d1 );
console.log( `c1 === e1`, c1 === e1 );
console.log( `d1 === e1`, d1 === e1 );
输出:
a1 == b1 false
a1 == c1 false
a1 == d1 false
a1 == e1 false
b1 == c1 true
b1 == d1 false
b1 == e1 false
c1 == d1 false
c1 == e1 false
d1 == e1 true
这里排查出两个特例:
null
双等于undefined
,但是不三等于undefined
。false
双等于0
,但是不三等于0
。
特例三:false和0
既然false
双等于0
,那么true
是不是双等于1
呢?
// var a1 = True; // ReferenceError: True is not defined
var b1 = true;
var c1 = 1;
// var d1 = False; // ReferenceError: False is not defined
var e1 = false;
var f1 = 0;
console.log(`b1 == c1`, b1 == c1);
console.log(`e1 == f1`, e1 == f1);
console.log(`b1 === c1`, b1 === c1);
console.log(`e1 === f1`, e1 === f1);
输出:
b1 == c1 true
e1 == f1 true
b1 === c1 false
e1 === f1 false
相关文章
总结
结论是:
- 除了
NaN
这个特殊的妖孽外,其它的空值使用三等号做判断都是完全没有问题的。如果换成双等号的话,就会出现特例了,比如null
等于undefined
,true
等于1
,false
等于0
。 NaN
和谁都不相等,连自己都不相等。真心是太狠了。只能使用isNaN()
进行判断。js
中么有True
,只有true
。这可能和其它的编程语言有所不一样。
更多js
的经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。