在 ES7 中,一个新的方法被添加到了 Array 原型对象上:Array.prototype.includes()
. 这个新的方法可以代替以前常用的 Array.indexOf()
方法。在本文中,我们将深入探讨这个新方法为什么更好,以及如何使用它。
1. 简介
Array.prototype.includes()
是一个用来判断数组中是否包含特定元素的方法。与 Array.indexOf()
不同的是,Array.prototype.includes()
返回一个布尔值,而非元素的下标。
Array.prototype.includes()
接受两个参数:要搜索的元素和可选的起始位置。如果不指定起始位置,默认从数组的头部开始搜索。
这个方法受到了 ECMAScript 2016 标准的支持。因此,只有支持 ES6 或更高版本的浏览器才能使用。
2. 优点
相对于 Array.indexOf()
方法,Array.prototype.includes()
有一些优点:
2.1 更加简洁
Array.prototype.includes()
方法调用更为简单,而且更加直观。与 Array.indexOf()
不同的是,不需要检查返回值是否为 -1。这可以让你的代码更加简洁。
2.2 不需要手动转换成布尔值
Array.prototype.includes()
方法会自动将返回值转换成布尔值。这个特性可以节省时间并减少代码量。
2.3 更加易读
由于 Array.prototype.includes()
相对于 Array.indexOf()
更加简洁,因此更容易读懂。这可以让你的代码更加易于维护。
3. 示例代码
下面是一个使用 Array.indexOf()
方法的示例代码:
var array = [1, 2, 3, 4, 5]; if (array.indexOf(3) !== -1) { console.log('The array contains 3.'); } else { console.log('The array does not contain 3.'); }
下面是同样的代码,但是使用 Array.prototype.includes()
方法:
var array = [1, 2, 3, 4, 5]; if (array.includes(3)) { console.log('The array contains 3.'); } else { console.log('The array does not contain 3.'); }
两行代码都会输出 “The array contains 3.”。但从示例可以看到,使用 Array.prototype.includes()
方法更加简洁和易读。
4. 注意事项
在使用 Array.prototype.includes()
方法时,需要注意以下几个方面:
4.1 区分返回值为 0 的情况
当要搜索的元素在数组的第一个位置时,Array.prototype.includes()
方法返回的是 0。这个返回值应该区分于返回值为 -1 的情况。
以下代码示范如何避免这个问题:
var array = [0, 1, 2, 3]; if (array.includes(0) || array.indexOf(0) === 0) { console.log('The array contains 0.'); } else { console.log('The array does not contain 0.'); }
4.2 不支持第二个参数为负数
当指定起始位置为负数时,Array.prototype.includes()
方法会将其自动转换成负数的绝对值。因此,如果你需要搜索的元素位于数组的倒数第二位或之前,应该使用 Array.lastIndexOf()
方法。
5. 经验总结
在本文中,我们介绍了 Array.prototype.includes()
方法,并与传统的 Array.indexOf()
方法进行了比较。我们发现,Array.prototype.includes()
相较于 Array.indexOf()
更加简洁、易读、并且不需要手动转换成布尔值。使用 Array.prototype.includes()
可以帮助你减少冗余代码,并使你的代码更加整洁易读。
当你在编写 JavaScript 代码时,如果需要搜索数组并返回一个布尔值,那么请考虑使用 Array.prototype.includes()
方法。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b5ffecadd4f0e0ffeb74c2