了解 ES8 Array.prototype.includes() 的使用和原理

阅读时长 5 分钟读完

ES8 中新增了一个 Array.prototype.includes() 方法,用于判断一个数组是否包含某个元素。本文将详细介绍这个方法的使用和原理,并提供示例代码和指导意义。

使用方法

Array.prototype.includes() 方法接收一个参数,表示要查找的元素。如果数组中包含该元素,则返回 true,否则返回 false。例如:

这个方法也可以接收第二个参数,表示从哪个下标开始查找。例如:

需要注意的是,Array.prototype.includes() 方法和 Array.prototype.indexOf() 方法的区别在于,前者可以正确处理 NaN 和 -0,而后者不能。

原理解析

Array.prototype.includes() 方法的原理很简单,其实就是遍历数组,查找是否包含指定元素。但是,它的实现比我们手动遍历数组的效率要高得多。

在 V8 引擎中,Array.prototype.includes() 方法的实现如下:

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

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

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

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

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

    ------ ------
  -
---
展开代码

可以看到,这个方法首先判断 this 是否为 null 或 undefined,然后将 this 转换为对象,获取数组长度,计算出查找的起始下标,然后使用 while 循环遍历数组,查找是否包含指定元素。如果找到了,则返回 true,否则返回 false。

需要注意的是,这个方法使用了位运算符来处理 fromIndex,这是因为当 fromIndex 为负数时,它会从数组末尾开始查找,而不是从数组开头。例如:

示例代码

下面是一些示例代码,展示了 Array.prototype.includes() 方法的使用场景。

判断数组是否包含指定元素

从指定下标开始查找元素

判断数组是否包含 NaN 或 -0

指导意义

Array.prototype.includes() 方法是一个非常实用的方法,可以用于判断一个数组是否包含某个元素。它的使用方法非常简单,而且在处理 NaN 和 -0 的时候比 Array.prototype.indexOf() 方法更加准确。

在实际开发中,我们经常需要判断一个数组是否包含某个元素,而以前我们通常使用 Array.prototype.indexOf() 方法来实现。但是,这个方法有一些缺点,比如不能正确处理 NaN 和 -0,不能从指定下标开始查找等。现在有了 Array.prototype.includes() 方法,我们可以更加方便地实现这个功能。

另外,Array.prototype.includes() 方法的原理也很有意思,它使用了位运算符来处理 fromIndex,这是一种非常巧妙的实现方式。如果你对 JavaScript 的底层实现感兴趣,可以深入了解一下这个方法的源码。

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

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试