将数值类型变量赋值给数组元素时出现报错的原因是什么?
报错常见原因及排查方案
indexOf匹配失败返回-1引发后续异常
当vCarsPos数组中不存在值为vCarPos - 1的元素时,indexOf会返回-1,此时vCarsPos[-1]取值为undefined,undefined + 1运算结果为NaN,如果后续逻辑依赖数值类型就会触发报错,部分严格场景下对数组-1索引赋值也会直接抛出异常。
可新增匹配判断逻辑规避:var vCarPosI = vCarsPos.indexOf(vCarPos -1) // 新增匹配校验 if (vCarPosI === -1) { // 此处补充未匹配到的处理逻辑,比如新增元素、输出提示等 return } var newPos = vCarsPos[vCarPosI] + 1 vCarsPos[vCarPosI] = newPosvCarsPos非数组类型
如果vCarsPos被错误赋值为对象、字符串、null/undefined等非数组类型,调用indexOf方法或者按索引赋值都会直接抛出类型错误,可提前通过Array.isArray(vCarsPos)校验变量类型是否符合预期。- 查找值为
NaN导致匹配失败
如果vCarPos本身是非数值类型,vCarPos - 1的运算结果会是NaN。由于数组indexOf基于严格相等规则(===)匹配,NaN === NaN结果为false,永远无法匹配到数组中的NaN元素,最终还是会返回-1触发后续异常,可提前校验vCarPos的数值有效性。 - 数组为只读状态
如果vCarsPos是经Object.freeze()冻结的数组,或是其他逻辑生成的只读数组,直接修改数组元素会抛出无法修改只读属性的类型错误,可检查数组是否被设置为不可修改。
内容的提问来源于stack exchange,提问作者Mystical_Ennio
相关产品推荐
相关产品推荐

