includes( )和indexOf( )的比较

2,415 阅读1分钟

1 基本区别

  • includes()和indexOf()都是用来检查数组是否包含某些元素,includes()返回值是布尔值,indexOf()返回的是索引值,如果没有返回-1
let arr = [1,2,3]
arr.indexOf(0)	// -1
arr.indexOf(2)	// 1
arr.includes(2)	// true

2 检查NAN和undefined

  • indexOf()不能检查NAN
  • includes()可以检查NAN
let arr = [NaN,]
arr.indexOf(NaN)	// -1
arr.indexOf(undefined) // -1
arr.includes(NaN)	// true
arr.includes(undefined)	// true

3 检查-0和+0

  • includes()和indexOf()没有区分-0和+0,在判断时,认为二者是相同的
console.log(+0 === -0) // true
let arr = [+0]
arr.includes(-0) // true
arr.indexOf(-0) // 0

4 不能检查复杂数据类型

  • 二者只能判断简单数据类型,对于对象、数组等复杂数据类型是不可以判断的
let arr = [{a:1},{a:2}]
arr.includes({a:1}) // false
arr.indexOf({a:1}) // -1

5 indexOf()和includes()都可用于字符串,并且存在有隐式转换

  • indexOf() 返回指定字符第一次出现的位置
let str = 'a1b2c3'
str.indexOf('2') // 3
str.indexOf(1) // 1

str.includes('2') // true
str.includes(1) // true