在javascript数组中查找NaN的索引

mca*_*dre 13 javascript arrays indexing nan

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

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

[1, NaN, 3].indexOf(NaN) => -1
Run Code Online (Sandbox Code Playgroud)

pho*_*oji 11

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

  • @mcandre,它没有被延迟.NaN的重点是表示在域中被认为不可表示的事物.这不是一种类型的东西,它有很多.例如,你不可能说-1的平方根,`i`,与零除以它自己(不确定)相同.但它们都是NaN. (3认同)

AL-*_*ami 8

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

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

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

let isNaNPresent = [1,2,NaN,'ball'].includes(NaN)
console.log(isNaNPresent)
Run Code Online (Sandbox Code Playgroud)

不要用 Array.prototype.indexOf

你不能使用Array.Prototype.indexOf来查找数组中的NaN索引.因为indexOf在内部使用了strict-equality-operator并且NaN === NaN求值为.So falseindexOf将无法在数组中检测到NaN

[1,NaN,2].indexOf(NaN) // -1
Run Code Online (Sandbox Code Playgroud)

使用Number.isNaN而不是isNaN:

在这里我选择 Number.isNaN而不是isNaN.因为isNaN对待string literalNaN.另一方面Number.isNaN只把NaN文字视为NaN

isNaN('hello world') // true
Number.isNaN('hello world') // false
Run Code Online (Sandbox Code Playgroud)

或者,编写自己的逻辑:

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

NaN === NaN // false
Run Code Online (Sandbox Code Playgroud)

我们可以用这个想法来编写我们自己的isNaN函数.

[1,2,'str',NaN,5].findIndex(e=>e!=e) // 3
Run Code Online (Sandbox Code Playgroud)