解决数组解构语法在Internet Explorer中的兼容问题及“Expected identifier in array variable”错误
Fixing JavaScript Array Destructuring Compatibility for Internet Explorer
我需要让自己的JavaScript函数能够在Internet Explorer中正常运行。目前其他浏览器均支持使用
var [sHour, sMinute, sSecond]这种数组解构语法,但Internet Explorer不支持该语法。函数运行时出现了“Expected identifier in array variable”错误,尝试拆分变量声明但不知道如何结合split实现赋值,请问该如何修改代码以实现IE兼容并消除该错误?
Internet Explorer(尤其是IE11及更早版本)完全不支持ES6引入的数组解构语法,这就是你报错的核心原因。我们可以把解构赋值替换为手动从split返回的数组中通过索引取值的方式,同时还要注意IE对const的支持有限,需要替换为var来保证全兼容。
具体修改步骤
- 替换数组解构逻辑:将解构赋值拆分为「先获取拆分后的数组,再通过索引逐个取出元素赋值」的写法,这是所有浏览器(包括IE)都支持的基础数组操作
- 替换
const声明:IE11对const的全局声明存在兼容性问题,换成var能彻底避免这类问题
修改后的完整兼容代码
function time_interval(start, end) { // 替换解构:先获取拆分后的数组,再通过索引取值 var startParts = start.split(":"); var sHour = startParts[0]; var sMinute = startParts[1]; var sSecond = startParts[2]; var endParts = end.split(":"); var eHour = endParts[0]; var eMinute = endParts[1]; var eSecond = endParts[2]; var s = new Date(); s.setHours(sHour, sMinute, sSecond); var e = new Date(); e.setHours(eHour, eMinute, eSecond); var a; if (s.getTime() < e.getTime()) { a = e.getTime() - s.getTime(); } else { e.setDate(e.getDate() + 1); a = e.getTime() - s.getTime(); } a = a / 1000; var h = Math.floor(a / 3600); var m = Math.floor((a % 3600) / 60); var s = a % 60; return ( (h ? h + ' hour ' : '') + (m ? m + ' minute ' : '') + (s ? s + ' second ' : '') ).trim(); } // 替换const为var以兼容IE var example = time_interval("10:00:00", "10:30:00"); console.log(example); // 输出: "30 minute"
说明
split(":")会返回一个包含小时、分钟、秒的数组(比如["10", "00", "00"]),通过[0]、[1]、[2]索引取值的逻辑,完全符合ES3标准,能在所有IE版本中正常运行- 替换
const为var是因为IE11不支持在全局作用域下使用const声明变量,会抛出语法错误,而var是所有浏览器都兼容的变量声明方式
这样修改后,你的函数既能在IE中正常运行,也能保持在现代浏览器中的原有功能。
内容的提问来源于stack exchange,提问作者user16409170
相关产品推荐
相关产品推荐

