JavaScript while循环使用'++'运算符触发Lint报错排查
问题根因
替换自增写法后逻辑异常的核心原因是执行顺序错误:
- 原写法里的后置自增
i++是先取当前i对应的数组元素值,再给i加1,逻辑本身是正确的,只是触发了Lint规则中禁用一元自增运算符++的校验,报错提示为Unary operator '++' used - 把
i += 1直接写在数组下标位置myArray[i += 1]时,JS会先执行i的自增操作,再读取新i对应的元素值:第一次循环直接跳过了索引为0的第一个数组元素,最后一轮循环还会读取到索引等于数组长度的undefined值,最终导致求和计算结果错误。
符合Lint规范的正确实现
只需要把取值操作和自增操作拆分为独立两行,保证执行顺序和原后置i++逻辑一致即可,修复后代码如下:
function average(myArray) { let i = 0; let summ = 0; if (myArray.length === 0) return undefined; const ArrayVz = myArray.length; while (i < ArrayVz) { summ += myArray[i]; i += 1; if (typeof summ === 'string') return undefined; } return Math.round(summ / ArrayVz); }
修复说明
- 严格遵循Lint要求,全程不使用
++一元运算符,不会触发相关校验报错 - 执行顺序与原正确逻辑完全对齐:先读取当前索引的数组元素累加,再更新索引值,不会出现跳过元素、读取越界值的问题
- 统一了原代码混乱的缩进,将循环内不会变更的数组长度变量从
let改为const,符合JS编码规范,且不影响原有逻辑 - 完整保留原代码所有业务逻辑:空数组返回
undefined、求和过程中遇到字符串类型值返回undefined、最终计算结果四舍五入取整
内容的提问来源于stack exchange,提问作者Edison Filho
相关产品推荐
相关产品推荐

