javascript语言中NaN、null、undefined的判断方法

来源:网络 文章列表 2019-05-30 1607
js的if else判断中包含undefined null false 0 NAN ""或''(空字符串)这留个值。其他值都视为true。

js的if else判断中包含undefined null false 0 NAN ""或''(空字符串)这留个值。其他值都视为true

而最难理解的就是null、undefined、NaN的判断了。下面我们就来一一讲解下。

 

一、判断特殊值NaN

NaN说明:NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。

出现NaN的场景

1、数值计算

  1. 5 - 'x' // NaN

2、数学函数的运算

  1. Math.acos(2) // NaN
  2. Math.log(-1) // NaN
  3. Math.sqrt(-1) // NaN

3、0除以0也会得到NaN

  1. 0 / 0 // NaN

NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,使用typeof运算符可以看得很清楚。

  1. typeof NaN // 'number'

 

NaN的判断

如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN值,不能使用 == 或 === 运算符。

  1. NaN === NaN // false
  2. NaN == NaN // false

 

方法一、通过 isNaN 可以判断一个数值是否为 NaN

  1. isNaN(123) // false
  2. isNaN('123') // false 相当于 isNaN(Number('123'))
  3. isNaN('123a') // true not a number

字符串 ‘123’返回的是false的原因是 isNaN 会先把参数转化为数字类型,再判断是不是 NaN

提示:isNaN() 函数通常用于检测 parseFloat()parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。 

  1. isNaN('blabla') // true
  2. isNaN(123) // false
  3. var tmp = 5 - 'abc';
  4. if(isNaN(tmp){
  5. console.log('not a number');
  6. }

上例子输出:not a number

上面我们说了,isNaN只能判断数值是否是 NaN 这个特殊的值。

 

方法二、先判断是不是数字,然后再使用 isNaN()

  1. var tmp = 5 - 'abc';
  2. console.log(typeof tmp === 'number' && window.isNaN(tmp))
  3. // true

这里我们可以封装成一个自定义函数

  1. /**
  2. * return true 位 NaN值,false 为非NaN值。
  3. */
  4. function check_isNaN (val) {
  5. return typeof val === 'number' && window.isNaN(val);
  6. }
  7. check_isNaN(5-'abc'); // true
  8. check_isNaN(0/0); // true
  9. check_isNaN(NaN); // true
  10. check_isNaN(123); // false
  11. check_isNaN('abc'); // false

 

二、判断 undefined值

undefined的判断比较容易,只要用 typeo f判断下就行

  1. var tmp = undefined;
  2. if (typeof tmp == "undefined"){
  3. alert("undefined");
  4. }

 

三、判断 null 值

null值的判断,我们必须先判断值是否为空,是否为undefined

  1. var tmp = null;
  2. if (!tmp && typeof(tmp)!="undefined" && tmp!=0){
  3. alert("null");
  4. }

 

腾讯云限量秒杀

1核2G 5M 50元/年 2核4G 8M 74元/年 4核8G 5M 818元/年 CDN流量包 100GB 9元

版权声明

本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:QQ:1292237044
愿本站的内容能为您的学习、工作带来绵薄之力。

评论

  • 随机获取
点击刷新
精彩评论