IE11报错:Object doesn't support property or method 'includes',求替代方案
解决IE11中
includes()方法不兼容的问题 嗨,太懂这种跨浏览器兼容的坑了!IE11确实不支持ES6新增的Array.prototype.includes()方法,这就是你代码在主流浏览器正常、唯独IE11报错的核心原因。下面给你两种实用的替代方案:
方案一:直接用indexOf()替换
这是最省心的单场景解决方案,因为IE11完全支持indexOf()方法。当数组包含目标元素时,indexOf()会返回它的索引值(≥0);如果不包含则返回-1,我们可以通过这个判断逻辑替代includes():
const keys = Object.keys(this.service.content); // 用indexOf的返回值判断元素是否存在 if (keys.indexOf(splitUrl[splitUrl.length - 1]) !== -1) { this.router.navigateByUrl(`/mysite/${splitUrl[splitUrl.length - 1]}/1`); }
方案二:添加全局Polyfill
如果你的项目里有很多地方都用到了includes(),不想逐个替换的话,可以在项目入口文件(比如main.js或者全局脚本里)添加一段Polyfill,一次性解决所有IE11的兼容问题:
// 为Array.prototype添加includes的兼容实现 if (!Array.prototype.includes) { Array.prototype.includes = function(searchElement) { // 简化版实现,足够覆盖大部分场景 return this.indexOf(searchElement) !== -1; }; }
添加之后,你原来的代码完全不需要修改,直接用includes()就可以在IE11里正常运行了。
两种方案都能解决你的问题,按需选择就行~
内容的提问来源于stack exchange,提问作者bobdolan
相关产品推荐
相关产品推荐

