为何JavaScript的indexOf查找不到NaN?

62 阅读1分钟

在JavaScript中,使用indexOf方法来查找数组中的元素时,有一个重要的行为需要了解,那就是indexOf方法对于NaN(Not-a-Number)的查找并不总是按预期工作。

indexOf方法的基本作用是查找数组中是否存在某个元素,并返回该元素在数组中的索引位置。如果找不到该元素,则返回-1。然而,当尝试用indexOf来查找NaN时,它实际上会返回-1,即使数组中确实包含了NaN值。

这是因为NaN有一个独特的特性:它不等于自身(NaN === NaN的结果是false)。由于indexOf方法内部是通过===操作符来比较元素是否相等的,因此它无法正确地识别出数组中的NaN值。

为了查找数组中的NaN值,你可以使用Array.prototype.findIndex方法,并传递一个检查isNaN的函数作为参数。isNaN函数能够正确地识别出NaN值,因为它不是通过===来比较的。

下面是一个示例代码,展示了如何使用findIndex来查找数组中的NaN值:

let arr = [1, 2, NaN, 4, 5];  
  
let index = arr.findIndex(function(element) {  
  return isNaN(element);  
});  
  
console.log(index); // 输出: 2

在这个例子中,findIndex方法遍历数组arr,对每个元素执行提供的函数。当遇到NaN时,isNaN(element)返回truefindIndex随即返回该元素的索引2

因此,虽然indexOf方法不能用于查找NaN值,但你可以通过findIndex方法配合isNaN函数来达到目的。