JS脚本在IE中报错Unexpected token,请求兼容解决方案
问题原因分析
这个报错只出现在IE浏览器里,核心原因是IE(包括IE11及所有更早版本)完全不支持ES6(ECMAScript 2015)引入的箭头函数语法() => {},而Chrome、Firefox、Edge这类现代浏览器早已完成了ES6及后续JS标准的支持,所以能正常解析执行你的代码。
除此之外,你的代码还有一个隐藏的IE兼容问题:IE中document.querySelectorAll()返回的NodeList对象并没有内置的forEach方法,哪怕你修复了箭头函数,这部分代码在IE里依然会报错。
修复方案
要让代码在IE中正常运行,需要把所有ES6语法回退到ES5兼容的写法,同时处理NodeList的遍历问题,这里提供两种可行的修改方式:
方式1:使用传统for循环遍历(最稳妥的兼容写法)
var clearContent = function() { var allDistricts = document.querySelectorAll(".district"); // 用普通for循环替代forEach,兼容所有IE版本 for (var i = 0; i < allDistricts.length; i++) { var item = allDistricts[i]; item.style.display = "none"; } };
方式2:将NodeList转为数组后使用forEach
如果更习惯forEach的写法,可以把NodeList转为数组后再调用forEach,同时用普通函数表达式替代箭头函数:
var clearContent = function() { var allDistricts = document.querySelectorAll(".district"); // 通过Array.prototype.call把NodeList转为可遍历的数组 Array.prototype.forEach.call(allDistricts, function(item) { item.style.display = "none"; }); };
补充说明
IE的JavaScript引擎停留在ES5标准,对ES6及之后的新语法(比如箭头函数、let/const、模板字符串等)和新API都没有支持,所以如果需要兼容IE,必须确保代码完全基于ES5规范编写,或者使用Babel这类工具将ES6+代码转译为ES5代码。
内容的提问来源于stack exchange,提问作者Thom-pouce-dev
相关产品推荐
相关产品推荐

