NodeJS/Javascript为何判定这些变量为undefined?
问题分析与解决方案
嘿,我一眼就揪出你代码里的核心问题了,先给你点明关键,再聊聊其他可能的排查方向:
最直接的根源:属性访问方式错误
你在模板字符串里写的t.mvar是坑点所在!这里的mvar是循环里的变量,但点语法会把它当成字面量属性名——也就是去访问t对象里真的叫"mvar"的属性,而不是当前循环到的键名对应的属性。
把代码改成方括号语法就能解决:
const t = games[0]; for (const mvar in t) { if (t.hasOwnProperty(mvar)) console.log(`${mvar}: ${t[mvar]}`); // 这里把t.mvar改成t[mvar] }
方括号语法会根据变量mvar的实际值去匹配对象属性,这也是调试器能看到值但输出undefined的最常见原因。
其他次要排查方向(改完方括号仍有问题再看)
如果调整后还是不对,可以检查下面这些情况:
- 属性是Symbol类型:
for...in循环不会遍历Symbol类型的键,但调试器可能会显示这类属性。不过你的输出里已经列出了常规字符串键,这个可能性很低。 - 属性被设置为不可枚举:如果属性的
enumerable特性被手动设为false,for...in也不会遍历到。这时可以用Object.entries(t)或Object.getOwnPropertyNames(t)来遍历所有自有属性试试。 - 异步时机问题:如果
games是通过API请求等异步方式获取的,可能你执行这段代码时数据还没加载完成,但调试器因为断点停留,显示的是后续加载完成的数据。可以加个日志确认games在执行循环时是否已经有正确值。
先改方括号语法,应该就能解决你的问题啦!
内容的提问来源于stack exchange,提问作者llamositopia
相关产品推荐
相关产品推荐

