美文网首页
JS 在数组中严格的判断NaN,并取出下标

JS 在数组中严格的判断NaN,并取出下标

作者: zackup | 来源:发表于2017-05-21 09:48 被阅读0次

1.问题

blob.png

当然了,这里的注释部分可以不看,因为我发现有错误=。=

问题来了,false 、null 、 0 、 "" 、undefined 都很好判断,直接使用===即可,但是 NaN 是不能用===来判断的,因为:

NaN === NaN;
false //永远返回 false , NaN 不等于其他任何值,包括它本身。

如果不能使用 === 来检测NaN,那该使用什么呢?

2.isNaN函数(不够严谨)

为什么说isNaN不够严谨,拿图片中的例子打比方

var a = [];
for(var i=0;i<arr.length;i++){
  a.push(arr[i])
}
console.log(a);

这个时候数组 a 是:

"100px,NaN,,-98765,34,-2,0,300,,function () {alert(1);},,[object HTMLDocument],,true,NaN,23.45元,5,NaN,function () {alert(3);}"

可以看到,为 NaN 的值有三个,这时,我们试试用 isNaN() 来判断下:

var b = [];
if( isNaN(arr[i]) ){
  b.push(i);
}

这个时候数组 b 是:

"0,1,8,9,11,14,15,17,18"

这跟我们之前看到的只有3个 NaN 差距也太大了吧~
因为 isNaN() 存在问题,

它总会隐式的将参数中的值转换成数字再做判断,这样就在判断很多明显不是 NaN 的值的时候也返回了 true ,任意的字符串使用 isNaN 都会返回 true ,这样就无法判断真正的 isNaN 了。

3.解决方法

  • 在使用 isNaN() 之前先检查一下这个值是不是数字类型,这样就避免了隐式转换的问题:
var c = [];
if(typeof arr[i] === "number" && isNaN(arr[i])){
    c.push(i);
}

这个时候数组c是:

"1,14,17"

这样就没有问题了。

相关文章

  • JS 在数组中严格的判断NaN,并取出下标

    1.问题 当然了,这里的注释部分可以不看,因为我发现有错误=。= 问题来了,false 、null 、 0 、 "...

  • python:numpy中数组的NAN和常用统计方法

    两个nan是不相等的 判断数组中不为0的数据的个数 3. 判断数组中nan的个数,数组的计算

  • JS 删除数组中的NaN

    例如有一个数组 我们想删除数组中所有的NaN其实很简单, 利用js中 NaN !== NaN的特性 那么我们就可以...

  • js中NaN的判断

    1.NaN是什么? NaN全称是Not-A-Number(不是一个数字)。 我们可以通过Number.NaN来获得...

  • JS中奇葩问题

    js 中NaN和NaN是不相等的,如果想判断一个value是否是NaN,可以使用isNaN(Value)

  • Javascript 数组

    Javascript 中的数组array是一种特殊的对象,数组下标可以视为对象的属性名称,注意js内部会将数组下标...

  • 9. 进阶算法之"搜索排序"

    简介 排序: 把某个乱序的数组变成升序或者降序的数组 搜索:找出数组中某个元素的下标 JS中的排序和搜索 JS中的...

  • js实现数组去重

    //借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等 方法一: functio...

  • 微信小程序数组操作

    tabs数组对象下的值进行条件判断并修改属性值 isActive数组对象属性,v数组对象,i遍历下标 tabs.f...

  • JavaScript 实现数组去重

    方法一:双重遍历 方法二:借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等 方...

网友评论

      本文标题: JS 在数组中严格的判断NaN,并取出下标

      本文链接:https://www.haomeiwen.com/subject/ekymxxtx.html