You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:58:02