比较indexOf和includes方法

   js中有两个判断数组是否存在某个元素的方法,一个是indexOf(ES5提供),一个是includes(ES6提供)。 

首先我们返回值来分析 

let arr = [21,22,23];
console.log(arr.indexOf(22));//1
console.log(arr.indexOf(88));//-1
console.log(arr.includes(22));//true
console.log(arr.includes(88));//false

 可以看出indexOf()用来查找某个元素的位置,如果存在返回元素在索引中的位置,不存在就返回-1;includes()返回的则是布尔值。所以在if条件判断的时候includes要简单得多

 

参数

 这两个方法都是有两个参数的,第一个参数都是要查找的元素

   indexOf第二个参数是开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。 注意:如果参数中提供的索引值是一个负值,并不改变其查找顺序,查找顺序仍然是从前向后查询数组。如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0

var array = [2, 5, 9, 8, 3];
console.log(array.indexOf(9, 6));//-1
console.log(array.indexOf(9, 2));// 2
console.log(array.indexOf(9, 3));// -1
console.log(array.indexOf(2, -1));//-1 从后往前数一个数,即在3中查询没有2,则返回-1
console.log(array.indexOf(2, -5));//0  从后往前数5个数,即在2,5,9,8,3中查询2,注意是从前往后查询2,存在返回在数组中的位置

 includes第二个参数fromIndex 从索引处开始查找元素。如果为负值,则按升序从 array.length + fromIndex 的索引开始搜 (即使从末尾开始往前跳 fromIndex 的绝对值个索引,然后往后搜寻)。默认为 0。

[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true

 

判断数组中是否有NaN,indexOf不可以判断

let arr = [NaN];
console.log(arr.indexOf(NaN));//-1   indexOf不可以判断数组是否存在NaN
console.log(arr.includes(NaN));//true  includes可以

 

当数组有空的值的时候,includes会认为空的值是undefined,而indexOf不会

let arr = new Array(3);
console.log(arr.indexOf(undefined));//-1   
console.log(arr.includes(undefined));//true 

 

  总结

 那么到底什么时候用includes,什么时候用indexOf?其实这要看情况而定

  如果想查找某个元素在数组中的索引位置,就用indexOf()

  如果想查找某个元素在数组中是否存在,就用includes()

 

posted @ 2021-10-17 10:00  打遍天下吴敌手  阅读(263)  评论(0编辑  收藏  举报