JavaScript对象属性推送至新对象时触发TypeError错误求助
解决TypeError: Cannot read property 'text' of undefined的问题
你这段代码在处理语义角色数据时触发了错误,根源是arrayItem.object为undefined,直接访问它的text属性自然会报错。下面给你几个实用的解决思路:
1. 安全访问嵌套属性(优先推荐)
方法A:用可选链操作符(ES2020+支持)
这个语法能帮你安全地访问嵌套属性,只要中间任何一层是undefined或null,就会返回undefined而不是抛出错误,代码也更简洁:
chunk[count].semantic.push({ subject: arrayItem.subject?.text, object: arrayItem.object?.text, action: arr... // 你的原有action逻辑 });
方法B:手动条件判断(兼容旧环境)
如果你的运行环境不支持可选链,就手动加判断兜底:
// 先提取属性,不存在就设为undefined或默认值 const subjectText = arrayItem.subject ? arrayItem.subject.text : undefined; const objectText = arrayItem.object ? arrayItem.object.text : undefined; chunk[count].semantic.push({ subject: subjectText, object: objectText, action: arr... // 你的原有action逻辑 });
2. 过滤无效数据再处理
如果只有包含有效object的语义角色才需要处理,可以先过滤掉不符合条件的条目:
msg.tmp.nlu.results.semantic_roles .filter(item => item.object && item.object.text) // 只保留有object且有text的项 .forEach(arrayItem => { chunk[count].semantic.push({ subject: arrayItem.subject.text, object: arrayItem.object.text, action: arr... // 你的原有action逻辑 }); });
3. 排查NLU返回数据的结构
你可以先打印console.log(msg.tmp.nlu.results.semantic_roles)看看实际返回的数据结构,确认是不是部分语义角色确实没有object字段——毕竟NLU识别结果可能存在不完整的情况,了解数据特点后能更精准地调整处理逻辑。
内容的提问来源于stack exchange,提问作者Jon Hart
相关产品推荐
相关产品推荐

