如何解决 ES7 中 Array.include() 方法在 IE 浏览器下无法使用的问题

阅读时长 4 分钟读完

背景介绍

Array.includes() 是 ES7 中新增的 Array 原型方法,用于判断数组是否包含特定元素,与 Array.indexOf() 相比其更直观易懂且代码更简洁。但是,IE(Internet Explorer)浏览器对于该方法的支持存在一定的问题,特别是在 IE11 中,该方法根本无法使用。

问题分析

在 IE11 中,上述代码会出现以下错误提示:

SCRIPT438: Object doesn't support property or method 'includes'

这是因为 IE11 不支持 ES7 中的 Array.includes 方法,因此在实际开发中,需要寻找相应的解决方案。

解决方案

有以下两种常见的解决方案:

1. Polyfill

通过 Polyfill 的方式来解决该问题。 Polyfill 具体指针对某个前端技术或 API 在低版本浏览器中的不兼容或缺失,自行开发实现一个相应功能的脚本。通俗来讲,就是在低版本浏览器中通过 JavaScript 模拟出一个高版本浏览器自带的方法或特性,并且整个过程都是透明的。

我们可以使用 core-js 这个开源库提供的 Polyfill 实现 Array.includes():

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

上述代码即为在 Array.prototype 上创建 includes 方法的 Polyfill 实现,这样我们就可以使用 Array.includes() 方法了。

2. 自行实现查找功能

如果不想依赖第三方库,则我们也可以自行实现查找功能。

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

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

        ----
     -

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

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

总结

通过以上两种方案的讲解,我们已经可以在 IE 浏览器下成功使用 Array.includes() 方法了。在实际开发中,我们应该遵循“高版本浏览器优先”的原则,以此来提升开发效率和代码质量。 在使用潜在不兼容的技术时应格外小心,及时查找兼容性表以减少问题的风险,同时也要留意兼容性 Polyfill 的使用以避免代码过于庞大。

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

纠错
反馈