如何在IE11中兼容Object.assign与map函数组合的JS代码写法
IE11兼容改写方案
你提供的代码在IE11环境异常,是因为用到了4个IE11不支持的语法特性:Object.assign 方法、=> 箭头函数、... 扩展运算符、[x.ID] 动态计算属性名,以下是兼容改写方案:
方案1:纯原生JS改写(无额外依赖)
该方案直接移除所有不兼容语法,逻辑和原代码完全一致,适合仅需要单段代码兼容的场景:
var dictionary = {}; var targetList = tempGroups[tempKey]; for (var i = 0; i < targetList.length; i++) { var currentItem = targetList[i]; dictionary[currentItem.ID] = currentItem.Value; }
改动说明
- 把
let替换为var,规避IE11对块级作用域的兼容缺陷 - 箭头函数替换为普通函数声明
- 移除
Object.assign和扩展运算符,直接遍历数组项向空对象赋值,和原逻辑合并对象的效果完全相同 - 改用对象方括号赋值的写法,替代动态计算属性名语法适配IE11
方案2:全局polyfill兼容(适合项目整体有ES6+兼容需求的场景)
如果项目中大量使用ES6+语法,可通过以下方式全局处理兼容:
- 引入
Object.assign的polyfill代码 - 通过babel工具转译箭头函数、扩展运算符、动态属性名等ES6+语法为ES5版本
提示:如果仅需要兼容这段代码,优先选择方案1,避免引入不必要的依赖增加页面加载体积。
内容的提问来源于stack exchange,提问作者Himelu5
相关产品推荐
相关产品推荐

