1 基本区别

● includes()和indexOf()都是用来检查数组是否包含某些元素,includes()返回值是布尔值,indexOf()返回的是索引值,如果没有返回-1

  1. let arr = [1,2,3]
  2. arr.indexOf(0) // -1
  3. arr.indexOf(2) // 1
  4. arr.includes(2) // true

2 检查NAN和undefined

● 因为indexOf()是严格按照===操作符来做值的比较,所以indexOf()不能检查NAN,但是includes()可以

  1. let arr = [NaN,]
  2. arr.indexOf(NaN) // -1
  3. arr.indexOf(undefined) // -1
  4. arr.includes(NaN) // true
  5. arr.includes(undefined) // true

3 检查-0和+0

● includes()和indexOf()没有区分-0和+0,在判断时,认为二者是相同的

  1. let arr = [+0]
  2. arr.includes(-0) // true
  3. arr.indexOf(-0) // 0

4 不能检查复杂数据类型

● 二者只能判断简单数据类型,对于对象、数组等复杂数据类型是不可以判断的

  1. let arr = [{a:1},{a:2}]
  2. arr.includes({a:1}) // false
  3. arr.indexOf({a:1}) // -1

5 indexOf()可用于字符串

● 返回指定字符第一次出现的位置,并且存在有隐式转换

  1. let str = 'a1b2c3'
  2. str.indexOf('2')); //3
  3. str.indexOf(1)); //3