ES7 中的 Array.prototype.includes() 方法的使用及坑

在 ECMAScript 2016(ES7)中,新增了一个 Array.prototype.includes() 方法,用于判断一个数组是否包含一个指定的元素,返回一个布尔值。本文将详细介绍该方法的使用及可能存在的坑,并提供示例代码以供参考。

基本用法

Array.prototype.includes() 方法的基本用法很简单,它接受一个参数——要搜索的元素,如果数组中包含该元素,则返回 true,否则返回 false。例如:

可选参数

Array.prototype.includes() 方法还有一个可选参数——起始位置(默认值为 0)。该参数指定从哪个索引开始搜索,如果指定了该参数,则只搜索该索引及之后的元素。例如:

与 indexOf() 方法的区别

Array.prototype.includes() 方法与 indexOf() 方法类似,都是用于搜索数组中是否包含指定元素的方法。它们的主要区别在于:

  • Array.prototype.includes() 方法可以正确处理 NaN、-0 和 +0,而 indexOf() 方法不能。
  • Array.prototype.includes() 方法的返回值是布尔值,而 indexOf() 方法的返回值是元素在数组中的索引(如果找到),或者 -1(如果没有找到)。

因此,在判断一个数组中是否包含 NaN、-0 或 +0 时,应该使用 Array.prototype.includes() 方法。例如:

可能存在的坑

Array.prototype.includes() 方法有一个可能存在的坑——它不能正确处理包含对象的数组。例如:

上述代码中,包含对象的数组 arr 中包含一个 value 属性为 2 的对象,但是 Array.prototype.includes() 方法返回的是 false,因为它判断对象的时候是按照引用地址进行比较的,而不是按照值进行比较的。

解决这个问题的方法有两种:

  • 使用 Array.prototype.findIndex() 方法,该方法接受一个回调函数作为参数,用于判断数组中的每个元素是否符合条件,如果找到符合条件的元素,则返回该元素的索引,否则返回 -1。例如:
  • 使用第三方库,例如 lodash 的 _.find() 方法,该方法接受一个回调函数作为参数,用于判断数组中的每个元素是否符合条件,如果找到符合条件的元素,则返回该元素,否则返回 undefined。例如:

总结

Array.prototype.includes() 方法是一个非常实用的方法,用于判断一个数组中是否包含一个指定的元素。但是需要注意的是,它不能正确处理包含对象的数组,需要使用 Array.prototype.findIndex() 方法或者第三方库进行处理。希望本文能够对大家理解和使用该方法有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65076c9a95b1f8cacd2d3059


纠错
反馈