ES12:如何使用更好的 Array.prototype.includes 函数?

ES12(又称 ES2021)是 JavaScript 的最新版本,为前端开发带来了一些新特性和改进。在其中,Array.prototype.includes 最受欢迎的增强之一。本文将详细介绍如何使用新的 Array.prototype.includes 函数来提高 JavaScript 代码的可读性和性能。

传统用法

在 ES6 中,Array.prototype.includes 可用于检查数组是否包含给定的值,返回布尔值。它的传统用法是:

const fruits = ['apple', 'banana', 'grape'];
console.log(fruits.includes('apple')); // true
console.log(fruits.includes('orange')); // false

这种用法确实很简单,但是在某些情况下可能会带来问题。例如,如果 fruits 数组包含假值(如 0、false、null、NaN、undefined),这种方法就会误判。例如:

const arr = [0, 1, false, null, NaN, undefined, ''];
console.log(arr.includes(null)); // true
console.log(arr.includes(NaN)); // true

在这个例子中,我们希望 null 和 NaN 不在数组中(因为它们是假值),但是 includes 却返回了 true。这是因为 includes 只能检查值而不能区分它们的类型。

新增特性:Array.prototype.includes 更好的判断

在 ES12 中,Array.prototype.includes 被更新以包括可选的第二个参数,用于指定从哪个位置开始搜索数组。但是,更有趣的是,Array.prototype.includes 还包括两个参数:searchElement 和 fromIndex。fromIndex 默认为 0,表示从数组的开头开始搜索。

searchElement 指定要查找的元素,而 fromIndex(可选)指定从第几个元素开始搜索。这使得我们可以进行更精确的搜索,避免了传统用法中的一些缺点。

例如,在上面的例子中,我们可以使用新版本的 includes,明确在哪个位置开始搜索:

const arr = [0, 1, false, null, NaN, undefined, ''];
console.log(arr.includes(null, 1)); // false
console.log(arr.includes(NaN, 1)); // false

现在,includes 方法正确地指示数组不包含 null 或 NaN,因为我们在从第二个元素开始搜索。

如何在项目中使用新特性

在项目中使用新的 Array.prototype.includes 函数,需要检查运行时的 JavaScript 环境是否支持此特性。要检查当前浏览器或 Node.js 版本是否支持 ES12,请使用以下代码:

const supportsES12 = (() => {
  try {
    eval('0 ?? 1');
    return true;
  } catch (e) {
    return false;
  }
})();

if (supportsES12) {
  // 使用新的 Array.prototype.includes 函数
} else {
  // 使用传统的 includes 函数
}

上面的代码使用 Nullish 合并运算符(这也是 ES12 中的新特性之一,但与本文无关),因此如果代码可以运行,则表明支持 ES12 特性。

如果你使用 Babel 或 TypeScript 进行编译,则无需担心。这些工具已经支持将 ES12 代码转换为向后兼容的 JavaScript 代码。

总结

新的 Array.prototype.includes 函数为 JavaScript 开发者带来了更好的搜索和查找体验。它解决了传统用法中的一些问题,并通过使用可选参数的方式,提供了更好的控制和精度。我们应该积极使用它,优化我们的代码。当然,由于它是 ES12 中的新特性,我们需要检查运行时 JavaScript 环境是否支持它。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65963db8eb4cecbf2da199e1


纠错反馈