ES7 中的 Array.prototype.includes 方法与 indexOf 方法的区别

面试官:小伙子,你的数组去重方式惊艳到我了

在 ES7 中,JavaScript 引入了一个新的数组方法 Array.prototype.includes,该方法被设计用于检查数组是否包含特定的元素。在此之前,数组的检索通常依靠数组方法 Array.prototype.indexOf 来实现。虽然两个方法作用相似,但它们之间存在差异。

Array.prototype.indexOf 方法

Array.prototype.indexOf 方法是一种在数组中查找给定值的直接方法,它返回第一个找到元素的索引,如果找不到,则返回 -1。该方法的语法如下:

----------------------------- -----------

其中:

  • searchElement:必选项,要查找的元素。
  • fromIndex:可选项,从哪个索引处开始搜索。

例如,以下代码片段在数字数组中查找数字9:

--- ------- - --- -- -- -- -- -- -- -- -- ----
--- ----- - -------------------
------------------- -- -

如果找不到搜索元素,则返回 -1:

--- ----- - --------------------
------------------- -- --

Array.prototype.includes 方法

Array.prototype.includes 方法是一种检查数组是否包含特定项的方法,它返回一个布尔值。该方法的语法如下:

------------------------------ -----------

其中:

  • searchElement:必选项,要查找的元素。
  • fromIndex:可选项,从哪个索引处开始搜索。

例如,以下代码片段使用 Array.prototype.includes 在数字数组中查找数字9:

--- ------- - --- -- -- -- -- -- -- -- -- ----
--- ----- - --------------------
------------------- -- ----

如果搜索元素不存在,则返回 false:

--- ----- - ---------------------
------------------- -- -----

区别与联系

虽然 Array.prototype.includes 方法功能类似于 Array.prototype.indexOf,但它们之间有一些重要的区别。

首先,两个方法的返回类型不同:Array.prototype.indexOf 方法返回元素的索引,而 Array.prototype.includes 方法返回布尔值。

其次,Array.prototype.includes 方法可以检索 NaN 值,而 Array.prototype.indexOf 方法无法正确处理此类情况。例如:

--- ------- - --- -- -- -----
---------------------------------- -- --
----------------------------------- -- ----

最后,Array.prototype.includes 方法具有更简洁的语法,特别是当只需要检查一个元素是否存在时。在这种情况下,使用 Array.prototype.includes 方法可以让代码更加简洁易懂。

应用场景

使用 Array.prototype.indexOf 方法通常可以满足大多数情况,但是当需要检索数组中是否有 NaN 或具有更简洁的语法时,应该使用 Array.prototype.includes 方法。

例如,以下代码片段使用 Array.prototype.includes 方法在一个字符串数组中检查是否包含特定的字符串:

--- ------ - --------- --------- ----------
--- ------------- - -------------------------
--------------------------- -- ----

在实际的应用中,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


猜你喜欢

  • 在 Sequelize 中如何使用数据库锁进行并发控制和资源管理

    并发控制是现代应用程序开发所必需的一个重要话题,这也是前端工程师经常需要面对的挑战之一。在 Node.js 中,Sequelize 是一个广受欢迎的 ORM 框架,它提供了一种便捷的方法来连接和操作不...

    9 天前
  • 使用自定义元素构建基于事件驱动的应用程序

    随着前端技术不断进化,我们现在可以使用自定义元素来构建定制化的 UI 组件,使得我们能够更好地封装和组织代码。在本文中,我们会介绍如何使用自定义元素和事件驱动的方法来构建基于 Web 组件的应用程序。

    9 天前
  • Angular 集成 OpenLayers

    概述 OpenLayers 是一个开源地图库,用于在 Web 应用程序中显示各种地图,并提供地理信息的交互功能。Angular 是一种流行的前端框架,可用于构建单页面应用程序。

    9 天前
  • GraphQL 的语言规范及实现

    GraphQL 是一种声明式的查询语言,广泛应用于现代 Web 应用程序中。它通过定义一个类型系统来描述数据的形式,并使用一个查询语言来让客户端定义他们需要的数据。

    9 天前
  • React.js SPA 中如何实现路由的传参?

    React.js 是一个快速、可扩展且灵活的 JavaScript 库,用于构建大型 Web 应用程序。在 React.js 中使用路由管理应用程序导航是非常重要的一部分。

    9 天前
  • Headless CMS 上基于防伪技术的品牌保护实践

    概述 在当前互联网环境中,创新和快速营销已成为品牌保持竞争力的关键因素之一。然而,这种革新也导致了品牌疫苗、假冒和盗版产品的增加。为了解决这个问题,我们可以使用防伪技术来保护我们的品牌。

    9 天前
  • Mocha + Appium 实现移动端自动化测试入门详解

    移动端自动化测试是现代软件开发中不可或缺的环节。在实现移动端自动化测试时,一个好的测试框架不仅可以提高测试效率,还可以为测试者省去很多繁琐的配置和实现细节。本文将会介绍 Mocha 和 Appium ...

    9 天前
  • 使用 Node.js 构建微服务架构的方法和技巧

    前言 微服务架构是一种适用于分布式应用程序的架构风格,是将应用程序细分成更小、更专注的组件,这些组件可以独立地部署和扩展。Microservices 可以提高应用程序的可伸缩性、弹性和可用性。

    9 天前
  • Cypress测试框架中的跨端兼容性测试实践方法

    在今天的软件开发中,移动设备的兴起导致了跨端兼容性测试的需求。这个测试过程需要确保您的应用程序在多种不同的设备和平台上都能够适当地运行,从而提高了用户的体验。本文介绍了如何使用Cypress测试框架来...

    9 天前
  • 使用 ESLint 的最佳实践,帮助您更好地开发 Javascript 应用程序

    引言 在开发过程中,我们写的代码可能会存在各种各样的问题,例如语法错误、代码风格不标准、潜在的错误或者安全漏洞等。为了解决这些问题,我们通常需要手动检查代码或者使用一些工具进行自动化检测。

    9 天前
  • Tailwind CSS 框架下如何 “画” 出美丽的图片样式?

    在现代 Web 开发中,页面美观和用户体验变得越来越重要。其中,图片样式的处理是其重要组成部分之一。为此,前端开发者需要了解各种图片样式处理框架和工具。其中,Tailwind CSS 是一个非常流行的...

    9 天前
  • Promise 如何避免多次调用 resolve 方法?

    引言 Promise 是异步编程的重要组成部分,它提供了一种优雅的解决方案来处理异步操作并构建可读性强、可维护性高的代码。 在使用 Promise 进行异步编程时,我们有时会遇到一些问题,其中一个最常...

    9 天前
  • Angular issue 半年未解决:SVG height attribute is not working in angular

    最近我们的前端团队碰到一个棘手的问题:在 Angular 中,SVG 的 height 属性无法正常工作。我们花费了大量的时间和精力来研究和尝试,但问题仍然没有解决。

    9 天前
  • 如何解决 Node.js 在读取大文件时出现的 “堆内存溢出” 问题?

    背景 在使用 Node.js 进行文件读取时,当读取到大文件时,可能会出现“堆内存溢出”的问题,导致服务器崩溃。这是由于 Node.js 的单线程机制,无法分配足够的内存来处理大数据量的文件。

    9 天前
  • 浅谈 ES8 中的 Object.values() 方法及其实用场景

    在 ES8 中,引入了 Object.values() 方法,是一种新的方法来获取对象的所有值并返回一个数组。该方法可以帮助前端开发人员更方便地对对象进行处理和操作,同时也可以使代码的可读性更加高效。

    9 天前
  • 在 Node.js 应用程序中使用 babel-register 的指南

    在前端开发中,使用新的 ECMAScript 版本进行开发已经成为一种趋势。Babel 是一个 JavaScript 编译器,可以将 ECMAScript 2015+ 版本的代码转换为向后兼容的 Ja...

    9 天前
  • ES7 中的 Object.defineProperty() 方法

    在 JavaScript 中,对象是一种常用的数据结构,同时也是前端开发中非常重要的一个元素。ES7 中的 Object.defineProperty() 方法提供了一种方便的方式来控制对象属性的特性...

    9 天前
  • Express.js 中 cookie-parser 的使用教程

    在现代 Web 开发中,通过设置和读取 cookie 值是一项非常常见和重要的任务。而在 Express.js 中,使用 cookie-parser 中间件可轻松地实现 cookie 的操作。

    9 天前
  • 部署基于 Hapi 框架的 Node.js 应用程序

    本文将介绍如何部署基于 Hapi 框架的 Node.js 应用程序。Hapi 是一个强大的 Node.js Web 应用程序框架,它可以简化 Web 应用程序的开发过程,并提供良好的路由和请求处理能力...

    9 天前
  • 如何在 Sequelize 中使用时间戳进行数据排序和查询

    Sequelize 是一款流行的 Node.js ORM 框架,用于处理 SQL 数据库的操作。在实际的前端开发中,时间戳是一项非常关键的数据类型,通常用于记录特定数据的创建时间和更新时间。

    9 天前

相关推荐

    暂无文章