14
[1, 2, 3].indexOf(3) => 2

[1, 2, NaN].indexOf(NaN) => -1

[1, NaN, 3].indexOf(NaN) => -1
4

3 回答 3

12

NaN 被定义为不等于任何东西(甚至不等于它本身)。见这里:http ://www.w3schools.com/jsref/jsref_isNaN.asp

于 2011-03-14T03:26:11.740 回答
12

您可以使用Array.prototype.findIndex方法找出 NaN 在数组中的索引

let index = [1,3,4,'hello',NaN,3].findIndex(Number.isNaN)
console.log(index)

您可以使用Array.prototype.includes检查数组中是否存在 NaN。虽然它不会给你索引!它将返回一个布尔值。如果存在 NaN,则返回 true,否则返回 false

let isNaNPresent = [1,2,NaN,'ball'].includes(NaN)
console.log(isNaNPresent)

不要使用Array.prototype.indexOf

您不能使用Array.Prototype.indexOf在数组内查找NaN的索引。因为 indexOf 在内部使用严格相等运算符NaN === NaN评估为.So falseindexOf 将无法检测到数组内的 NaN

[1,NaN,2].indexOf(NaN) // -1

使用Number.isNaN代替isNaN

在这里,我选择 Number.isNaN而不是isNaN。因为isNaN视为。另一方面,仅将文字string literal视为NaNNumber.isNaNNaNNaN

isNaN('hello world') // true
Number.isNaN('hello world') // false

或者,编写您自己的逻辑:

您可以编写自己的逻辑来查找 NaN。正如您已经知道的那样,NaN 是 javascript 中唯一的值,即not equal to itself. 这就是我建议不要使用的原因Array.prototype.indexOf

NaN === NaN // false

我们可以利用这个思想来编写我们自己的 isNaN 函数。

[1,2,'str',NaN,5].findIndex(e=>e!=e) // 3
于 2018-02-15T18:18:04.060 回答
2

您必须查看每个项目以返回 NaN 值的索引数组-

function findNaNs(arr){
    return arr.map(function(itm, i){
        if(isNaN(itm)) return i;
        return false;
    }).filter(function(itm){
        return itm;
    });
}

findNaNs([1, NaN, 3, 4, 'cat'/3])

//或找到第一个-

function firstNaN(arr){
    var i= 0, L= arr.length;
    while(i<L){
        if(isNaN(arr[i])) return i;
        ++i;
    }
    return -1;
}
于 2011-03-14T03:57:04.140 回答