本文整理自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array 对比every(),some(),includes(),indexOf(),lastIndexOf(),find(),findIndex(),forEach(),map(),filter(),fill()

对照表

方法 作用 返回值 是否改变源Array 核心参数
every() 是否所有元素都通过了指定函数的测试 boolean × (…)=>boolean
some() 是否至少有一个元素通过了指定函数的测试 boolean × (…)=>boolean
includes() 是否包含一个指定的值;使用===判定值是否相等 boolean × any
indexOf() 功能同includes(),返回值为索引 number | -1 × any
lastIndexOf() 功能同includes(),返回值为索引,顺序为从后往前 number | -1 × any
find() 返回满足指定函数的第一个元素的 any | undefined × (…)=>boolean
findIndex() 功能同find(),返回值为索引 number | -1 × (…)=>boolean
forEach() 遍历所有元素,执行指定函数 undefined × (…)=>void
map() 遍历所有元素,执行指定函数后返回新数组 Array × (…)=>any
filter() 遍历所有元素,返回满足指定函数的新数组 Array × (…)=>boolean
fill() 元素覆盖为指定元素 Array any

一些使用说明

  1. 理论上说,所有的遍历都可以改变源数组,因为在核心参数中,如果是函数,则可以传入value/index/array,可以通过array[index]直接修改数组。但是建议不要使用,因为会影响他人对代码逻辑的判断;如果必须要通过此种方式修改,应当加以说明。
  2. 遍历所有元素时,均不可使用break语句
  3. 某些方法功能相似,在代码中应当分优先级使用。例如优先使用forEach(),功能无法实现的再优先使用map()等。
  4. 数组的空位在遍历中处理规则非常不统一,这里不再多描述,建议在代码中完全避免空位的出现,数组在创建时通过fill()进行手动初始化。
  5. 性能最高的遍历方式就是普通for循环。