我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

JavaScript里面有一些特殊的空值,表面上来看都表示空。在写代码的时候,总是需要对一些异常信息做拦截处理。这个时候就需要做这些空值判断。当然了,传统习惯上,大家会使用双等号或者是三等号进行判断。那么,双等号或者三等号判断,对于这些特殊的空值,还能有作用么?这就是本文要讨论的问题。

苏南大叔:JavaScript,NaN/undefined/null/False 等特殊空值判断 - 特殊空值判断
JavaScript,NaN/undefined/null/False 等特殊空值判断(图5-1)

苏南大叔的“平行空间笔记本”技术博客,记录苏南大叔的编程感悟。本文测试环境:win10chrome@116.0.5845.141node@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,它和自己都不相等。而其它的特殊空值,都可以使用双等号或者三等号,进行判断。

苏南大叔:JavaScript,NaN/undefined/null/False 等特殊空值判断 - 测试代码一
JavaScript,NaN/undefined/null/False 等特殊空值判断(图5-2)

特例一: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

苏南大叔:JavaScript,NaN/undefined/null/False 等特殊空值判断 - 测试代码二
JavaScript,NaN/undefined/null/False 等特殊空值判断(图5-3)

特例二: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

苏南大叔:JavaScript,NaN/undefined/null/False 等特殊空值判断 - 测试代码三
JavaScript,NaN/undefined/null/False 等特殊空值判断(图5-4)

特例三: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

苏南大叔:JavaScript,NaN/undefined/null/False 等特殊空值判断 - 测试代码四
JavaScript,NaN/undefined/null/False 等特殊空值判断(图5-5)

相关文章

总结

结论是:

  • 除了NaN这个特殊的妖孽外,其它的空值使用三等号做判断都是完全没有问题的。如果换成双等号的话,就会出现特例了,比如null等于undefinedtrue等于1false等于0
  • NaN和谁都不相等,连自己都不相等。真心是太狠了。只能使用isNaN()进行判断。
  • js中么有True,只有true。这可能和其它的编程语言有所不一样。

更多js的经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   js    node