如何检查数组JavaScript中是否存在NaN关键字

我们有一个包含真值和假值的元素数组。我们的工作是编写一个函数,该函数返回一个数组,该数组的索引为原始数组中的NaN。

NaN!== NaN

NaN的数据类型实际上是数字。尽管NaN是一个伪造的值,但它具有其他数据类型或变量没有的特殊属性。就是NaN === NaN表达式会产生false。而且只有在NaN的情况下,它才是错误的。

因此,我们可以充分利用此行为,并选择NaN值指数。为此的代码将是-

const arr = [7, 1, "123abc", undefined, NaN, 78, NaN, null, "aes", NaN,
'', null, NaN];
const pickNaN = (arr) => {
   return arr.reduce((acc, val, ind) => {
      if(val !== val){
         acc.push(ind);
      };
      return acc;
   }, []);
};
console.log(pickNaN(arr));

使用isNaN()/ Number.isNaN()

isNaN()方法基于这样的事实提供的值是否是NaN或可以强制转换为NaN返回true或false。而Number.isNaN()函数仅在提供的值实际上是NaN时才返回true。

因此,Number.isNaN()是检查NaN over的可靠方法isNaN()。代码输出的差异如下所示。

示例

const arr = [7, 1, "abc", undefined, NaN, 78, NaN, null, "aes", NaN, '',
null, NaN];
const pickNaN = (arr) => {
   return arr.reduce((acc, val, ind) => {
      if(Number.isNaN(val)){
         acc.reliableWay.push(ind);
      };
      if(isNaN(val)){
         acc.unreliableWay.push(ind);
      }
      return acc;
   }, {
      reliableWay: [],
      unreliableWay: []
   });
};
console.log(pickNaN(arr));

这段代码准备了两个数组,一个使用Number.isNaN(),另一个使用isNaN()

输出结果

输出将是-

{
   reliableWay: [ 4, 6, 9, 12 ],
   unreliableWay: [ 2, 3, 4, 6, 8, 9, 12]
}

我们可以清楚地看到如何isNaN()计算许多非NaN值作为NaN。这就是为什么Number.isNaN()是一种更可靠的方法。