在 ES7 中,JavaScript 引入了一个新的数组方法 Array.prototype.includes
,该方法被设计用于检查数组是否包含特定的元素。在此之前,数组的检索通常依靠数组方法 Array.prototype.indexOf
来实现。虽然两个方法作用相似,但它们之间存在差异。
Array.prototype.indexOf
方法
Array.prototype.indexOf
方法是一种在数组中查找给定值的直接方法,它返回第一个找到元素的索引,如果找不到,则返回 -1。该方法的语法如下:
array.indexOf(searchElement[, fromIndex])
其中:
searchElement
:必选项,要查找的元素。fromIndex
:可选项,从哪个索引处开始搜索。
例如,以下代码片段在数字数组中查找数字9:
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var index = numbers.indexOf(9); console.log(index); // 8
如果找不到搜索元素,则返回 -1:
var index = numbers.indexOf(11); console.log(index); // -1
Array.prototype.includes
方法
Array.prototype.includes
方法是一种检查数组是否包含特定项的方法,它返回一个布尔值。该方法的语法如下:
array.includes(searchElement[, fromIndex])
其中:
searchElement
:必选项,要查找的元素。fromIndex
:可选项,从哪个索引处开始搜索。
例如,以下代码片段使用 Array.prototype.includes
在数字数组中查找数字9:
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var found = numbers.includes(9); console.log(found); // true
如果搜索元素不存在,则返回 false:
var found = numbers.includes(11); console.log(found); // false
区别与联系
虽然 Array.prototype.includes
方法功能类似于 Array.prototype.indexOf
,但它们之间有一些重要的区别。
首先,两个方法的返回类型不同:Array.prototype.indexOf
方法返回元素的索引,而 Array.prototype.includes
方法返回布尔值。
其次,Array.prototype.includes
方法可以检索 NaN 值,而 Array.prototype.indexOf
方法无法正确处理此类情况。例如:
var numbers = [1, 2, 3, NaN]; console.log(numbers.indexOf(NaN)); // -1 console.log(numbers.includes(NaN)); // true
最后,Array.prototype.includes
方法具有更简洁的语法,特别是当只需要检查一个元素是否存在时。在这种情况下,使用 Array.prototype.includes
方法可以让代码更加简洁易懂。
应用场景
使用 Array.prototype.indexOf
方法通常可以满足大多数情况,但是当需要检索数组中是否有 NaN 或具有更简洁的语法时,应该使用 Array.prototype.includes
方法。
例如,以下代码片段使用 Array.prototype.includes
方法在一个字符串数组中检查是否包含特定的字符串:
var fruits = ['apple', 'banana', 'orange']; var containsApple = fruits.includes('apple'); console.log(containsApple); // true
在实际的应用中,Array.prototype.includes
方法可以帮助我们更快地编写代码并减少错误。例如,当需要在列表中搜索多个元素时,使用 Array.prototype.includes
方法可以将多个检查组合成单一的操作,以简化代码并提高可读性。
结论
在 ES7 中,JavaScript 引入了一个新的数组方法 Array.prototype.includes
,该方法是一种检查数组是否包含特定项的方法,并返回一个布尔值。相比之下,Array.prototype.indexOf
方法是一种在数组中查找给定值的直接方法,它返回第一个找到元素的索引,如果找不到,则返回 -1。
虽然两个方法功能类似,但是在实践中,应该根据具体需求选择使用哪种方法。在不需要检索 NaN 值和具有更简洁的语法时,可以使用 Array.prototype.indexOf
方法。而在需要检索 NaN 值和具有更简洁的语法时,应该使用 Array.prototype.includes
方法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6709e891d91dce0dc87cede0