用indexOf还是includes

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。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容