主要用途:判断字符串或者数组中是否有对应的元素
1.数组中includes和indexOf方法比较
1.1函数返回值
const arr=[1,2,3,4]
arr.indexOf(1) // 0 若元素存在,返回下标 Number类型
arr.indexOf(5) //-1 元素不存在,返回-1 Number类型
arr.includes(1) // true 元素存在返回true bool类型
arr.includes(5) //false 不存在返回false bool类型
1.2函数的第二个参数
includes与indexOf均存在第二个可选参数,且均表示以第二个参数为数组或字符串的起始检索下标;第二个参数可为负数,若该参数为-1,则表示检索数组以倒数第一个元素为起点。
arr.indexOf(1,2) // -1
arr.indexOf(2,1) // 1
arr.indexOf(2,-1) // -1
arr.includes(1,2) // false
arr.includes(2,1) // true
arr.includes(2,-1) // false
1.3区别
indexOf与indcludes方法关于NaN与undefined的判断不同,具体见代码
[NaN].indexOf(NaN) //-1
[NaN].includes(NaN) //true
//稀疏数组中undefined判断
const arr = []
arr[2] = 1 //arr[0]、arr[1]为undefined
[NaN].indexOf(undefined) //-1
[NaN].includes(undefined) //true
2.字符串和数组中indexOf与includes
相同点:对于数组和字符串来说,indexOf与includes的调用方法、参数、返回值均相同;
不同点:字符串中,调用方法会进行类型转换,类似于“==”;数组中会进行严格匹配,类似于“===”
'1234'.indexOf(2) //1
['1','2','3','4'].indexOf(2) //-1
'1234'.includes(2) //true
['1','2','3','4'].includes(2) //false