Uncaught TypeError报错排查:添加fetchValues函数后无法读取value属性
问题分析与修复
核心错误点
- 循环变量增量错误:第二个
for循环里的增量写了i++,实际应该是j++。这个错误会让i在内部循环中被快速递增,直接超出elemsDataCount的范围,导致nodeLists[j][i]变成undefined,读取value时触发Cannot read properties of undefined报错。 - 模板字符串语法错误:给对象赋值时用单引号包裹
${attrs[j]},这会把'${attrs[j]}'当作字面量键名,而非解析attrs[j]的实际值,必须改用反引号才能正确解析模板字符串。
修复后的fetchValues函数
const fetchValues = (attrs, ...nodeLists) => { let elemsAttrCount = nodeLists.length; let elemsDataCount = nodeLists[0].length; let tempDataArr = []; // 外层循环处理每组数据 for(let i = 0; i < elemsDataCount; i++ ){ let dataObj = {}; // 内层循环遍历每个属性对应的节点列表 for (let j = 0; j < elemsAttrCount; j++ ) { // 修正循环增量为j++ // 用反引号正确解析模板字符串,设置对应键名 dataObj[`${attrs[j]}`] = nodeLists[j][i].value; } tempDataArr.push(dataObj); } return tempDataArr; }
额外优化建议
可以在函数开头添加边界检查,避免因不同节点列表长度不一致导致的潜在报错:
// 在函数开头插入 const allSameLength = nodeLists.every(list => list.length === elemsDataCount); if (!allSameLength) { console.error('所有传入的节点列表长度必须一致'); return []; }
内容的提问来源于stack exchange,提问作者Abdi Med Amin
相关产品推荐
相关产品推荐

