JS数组赋值报错TypeError: Cannot convert undefined or null to object求助
问题根因排查
- 报错
Cannot convert undefined or null to object最直接的触发点是调用Object.keys(ativos)时,传入的ativos参数本身是undefined或者null,Object.keys只能接收对象/数组类型的入参,传入空值就会抛出这个错误。 - 第二个隐性问题:你用
Object.keys(ativos).length作为循环边界,但取值用的是ativos[i],如果ativos不是数字索引的数组,而是普通的键值对对象,那么ativos[i]会拿到undefined,可能引发后续逻辑异常。 - 第三个问题:代码中的
i、a变量没有显式声明,会成为隐式全局变量,可能被其他逻辑修改导致循环边界异常。
修复方案
1. 优化代码逻辑
新增入参校验,调整取值逻辑兼容对象类型的入参:
function matrizDeCovariancia(ativos) { // 新增入参校验,提前拦截非法输入 if (!ativos || typeof ativos !== 'object') { console.error('入参ativos非法:', ativos) return [] } // 提前提取key数组,避免循环中重复计算 const ativoKeys = Object.keys(ativos) const len = ativoKeys.length let i = 0 const matrizResultado = [] while (i < len) { matrizResultado[i] = [] let a = 0 // 用提取到的key取值,兼容非数字索引的对象入参 const ativoI = ativos[ativoKeys[i]] while (a < len) { const ativoA = ativos[ativoKeys[a]] matrizResultado[i][a] = MatFin.ativos.covariancia(ativoI, ativoA) a++ } i++ } return matrizResultado }
2. 调用侧校验
如果修复后依然报错,在调用matrizDeCovariancia的位置打印传入的ativos值,确认入参是否符合预期即可。
内容的提问来源于stack exchange,提问作者user15863913
相关产品推荐
相关产品推荐

