使用axios获取对象子节点值时变量调用返回undefined问题排查
问题原因及解决方案
核心问题
你遇到的情况是:用变量trait2作为属性名访问resp2对象时返回undefined,但直接通过.语法(resp2.Id)访问同名属性却正常工作。
大概率原因
从req.params获取的trait2值存在不可见的空白字符(比如前后空格、换行符),或是大小写与对象实际属性名不匹配。即使你用String(trait2)转换类型,也不会自动清理这些无效字符,导致属性名匹配失败。
验证方法
可以通过以下代码确认问题:
// 打印对象所有实际属性名,确认是否包含"Id" console.log('对象属性列表:', Object.keys(resp2)); // 用JSON.stringify打印trait2,能显示隐藏的空白字符 console.log('trait2实际值:', JSON.stringify(trait2));
解决方案
清理空白字符
对trait2执行trim()操作,去除前后空格:trait2 = String(trait2).trim();处理大小写不匹配(可选)
如果存在大小写差异,统一转换后再匹配:trait2 = String(trait2).trim().toLowerCase(); // 找到对象中对应大小写的属性名 const matchedKey = Object.keys(resp2).find(key => key.toLowerCase() === trait2); console.log(resp2[matchedKey]);
修改后的代码示例
else { resp2 = resp_data.Application[trait]; console.log(resp2); // 清理trait2的无效字符 trait2 = String(trait2).trim(); console.log('处理后trait2:', JSON.stringify(trait2)); console.log('对象属性:', Object.keys(resp2)); console.log(resp2[trait2]); // 现在应该能正常返回值 console.log(resp2.Id); }
内容的提问来源于stack exchange,提问作者user20180254
相关产品推荐
相关产品推荐

