使用 ES7 中的 Array.prototype.includes 替换 indexOf 以避免遇到的错误

在前端开发中,我们经常需要对数组进行操作。而其中一个常用的方法就是查找数组中是否包含某个元素。在 ES5 中,我们可以使用 indexOf 方法来实现这个功能。但是,indexOf 方法有一些限制,可能会遇到一些问题。在 ES7 中,新增了 Array.prototype.includes 方法,可以解决这些问题。本文将介绍如何使用 Array.prototype.includes 方法,以及它的优点和使用注意事项。

indexOf 方法的问题

indexOf 方法用于查找数组中某个元素的位置。如果找到了,就返回该元素的下标;如果没有找到,就返回 -1。例如:

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

但是,indexOf 方法存在以下几个问题:

  1. 不支持查找 NaN

indexOf 方法无法正确查找 NaN。因为 NaN 不等于任何值,包括它本身。例如:

----- --- - ------
----- ----- - ----------------- -- --
  1. 不支持查找 undefined

indexOf 方法无法正确查找 undefined。因为 undefined 不是一个常量,而是一个全局变量,可能被修改。例如:

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

但是,如果修改了 undefined,就无法正确查找了。例如:

--------- - --------
----- --- - ------------
----- ----- - ----------------------- -- --
  1. 不支持查找对象

indexOf 方法无法正确查找对象。因为对象在比较时,比较的是引用地址,而不是值。例如:

----- --- - - ----- ------- --
----- --- - ------
----- ----- - ------------- ----- ------- --- -- --
  1. 不支持查找数组

indexOf 方法无法正确查找数组。因为数组在比较时,比较的是引用地址,而不是值。例如:

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

Array.prototype.includes 方法的优点

ES7 新增了 Array.prototype.includes 方法,用于查找数组中是否包含某个元素。与 indexOf 方法相比,Array.prototype.includes 方法有以下优点:

  1. 支持查找 NaN

Array.prototype.includes 方法可以正确查找 NaN。例如:

----- --- - ------
----- ------ - ------------------ -- ----
  1. 支持查找 undefined

Array.prototype.includes 方法可以正确查找 undefined。例如:

----- --- - ------------
----- ------------ - ------------------------ -- ----
  1. 支持查找对象

Array.prototype.includes 方法可以正确查找对象。例如:

----- --- - - ----- ------- --
----- --- - ------
----- ------ - ------------------ -- ----
  1. 支持查找数组

Array.prototype.includes 方法可以正确查找数组。例如:

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

使用 Array.prototype.includes 方法

Array.prototype.includes 方法的使用方法与 indexOf 方法相似。例如:

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

Array.prototype.includes 方法的语法如下:

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

其中,searchElement 参数是要查找的元素,fromIndex 参数是开始查找的位置。如果省略 fromIndex 参数,则从数组的开头开始查找。

例如:

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

注意事项

在使用 Array.prototype.includes 方法时,需要注意以下几点:

  1. 兼容性问题

Array.prototype.includes 方法是 ES7 中新增的方法,不是所有的浏览器都支持。但是,你可以使用 polyfill 或者 babel 编译器来解决兼容性问题。例如:

-- --------------------------- -
  ------------------------ - ---------------------- --- ------------ -
    ---- --------
    --- - - -------------
    --- --- - ------------------ -- --
    -- ---- --- -- -
      ------ ------
    -
    --- - - ---------------------- -- --
    --- --
    -- -- -- -- -
      - - --
    - ---- -
      - - --- - --
      -- -- - -- -- - ---
    -
    --- ---------------
    ----- -- - ---- -
      -------------- - -----
      -- -------------- --- -------------- --
         -------------- --- ------------- -- -------------- --- ---------------- -
        ------ -----
      -
      ----
    -
    ------ ------
  --
-
  1. 与其他方法的区别

Array.prototype.includes 方法与其他方法的区别可能会导致一些问题。例如,Array.prototype.includes 方法与 Array.prototype.indexOf 方法的区别是,includes 方法可以正确查找 NaN,而 indexOf 方法不能。因此,在使用 includes 方法时,需要注意与其他方法的区别。

示例代码

下面是一个使用 Array.prototype.includes 方法的示例代码:

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

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

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

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

总结

在前端开发中,使用 Array.prototype.includes 方法可以避免 indexOf 方法的一些限制,例如无法正确查找 NaN、undefined、对象和数组。但是,在使用 Array.prototype.includes 方法时,需要注意兼容性问题和与其他方法的区别。希望本文对大家有所帮助。

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