背景介绍
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()
方法了。
const arr = ['a', 'b', 'c']; console.log(arr.includes('a')); // true console.log(arr.includes('d')); // false
2. 自行实现查找功能
如果不想依赖第三方库,则我们也可以自行实现查找功能。
-- -------------------- ---- ------- -------- -------------------- -------------- --------- - -- - ----- --- - ------------ --- -- --- - - ------------------ -- - - --------- - --- - -------------------- --- ----- -- - ---- - -- --------- --- -------------- - ------ ----- - ---- - ------ ------ - ----- --- - ----- ---- ----- ------------------------------ ------ -- ---- ------------------------------ ------ -- -----
总结
通过以上两种方案的讲解,我们已经可以在 IE 浏览器下成功使用 Array.includes()
方法了。在实际开发中,我们应该遵循“高版本浏览器优先”的原则,以此来提升开发效率和代码质量。 在使用潜在不兼容的技术时应格外小心,及时查找兼容性表以减少问题的风险,同时也要留意兼容性 Polyfill 的使用以避免代码过于庞大。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b5dd16add4f0e0ffe9a34f