JavaScript reduce函数在IE11中无法正常工作的问题求助
解决IE中数组reduce求和失效的问题
这问题我碰到过好多次,IE对ES6语法的支持确实很有限,咱们一步步拆解解决:
核心原因
你的代码里用了ES6的箭头函数,而IE全版本都不支持箭头函数语法,这就是Chrome正常、IE失效的关键原因。另外还要注意,IE里对parseFloat处理空值/非数字的情况也会更敏感,可能导致求和出现NaN。
修复方案
把箭头函数替换成IE支持的普通匿名函数,同时增加数值有效性校验,避免异常值干扰:
var test = checkoutConfig.quoteItemData.reduce(function(a, v) { // 先判断v.row_weight是否存在且能转成有效数字 var weight = parseFloat(v.row_weight); // 只有是有效数字的时候才累加 return a + (isNaN(weight) ? 0 : weight); }, 0);
额外的兼容性保障
如果你的项目里可能存在checkoutConfig.quoteItemData不是数组的情况(比如IE里某些环境下返回的是类数组对象),可以先做一层数组转换:
var quoteItems = Array.prototype.slice.call(checkoutConfig.quoteItemData); var test = quoteItems.reduce(function(a, v) { var weight = parseFloat(v.row_weight); return a + (isNaN(weight) ? 0 : weight); }, 0);
这样就能确保在IE里也能正常运行啦,本质就是把ES6语法降级到IE兼容的ES5标准,同时做好异常值处理。
内容的提问来源于stack exchange,提问作者Jilco Tigchelaar
相关产品推荐
相关产品推荐

