js中有两个判断数组是否存在某个元素的方法,一个是includes,一个是indexOf。
includes使用起来很方便,本身返回的也是布尔值
let result = [1,2,3].includes(1)
console.log(result)
// output: true
indexOf的话则是
let result = [1,2,3].indexOf(1) > -1
console.log(result)
// output: true
两个方法似乎都能达到我们的目的,但有以下一种情况,当我们的数组里面存在NaN值的时候。
这个值比较特殊:
NaN == NaN // false
NaN === NaN // false
可以看出,虽然都是NaN,但却不是相等的。
然后我们再来看一下:
[NaN,1,2,3].includes(NaN) // true
[NaN,1,2,3].indexOf(NaN) > -1 // false
这里差异就出来了,明显indexOf没有对NaN值做处理。但也正是因为如此,indexOf的效率明显要高于includes。所以我们使用indexOf的过程中要注意NaN值带来的影响,避免其引起隐晦的bug。