嵌套for循环条件中变量修改:打印每日乐队列表遇TypeError报错
问题分析与修复
报错原因
- 对象属性访问方式错误:你用了
midgard.whatDay[x],但whatDay是函数参数的数组,并非midgard对象的属性。通过变量访问对象属性时,必须使用方括号语法midgard[whatDay[x]],不能用点语法。 - 变量声明顺序问题:第一次调用
playingWhen(whatDay)时,midgard还未定义(它在函数调用之后才声明),此时midgard为undefined,触发后续属性读取错误。 - 硬编码日期值:内层循环里固定写了
midgard.mon[i].act,没有根据外层循环的日期动态切换,无法遍历所有日期的演出信息。
修复后的代码
const whatDay = ["mon", "tue", "wed"]; const midgard = { mon: [ { start: "00:00", end: "02:00", act: "Barrows Group", cancelled: true }, { start: "02:00", end: "04:00", act: "break" }, ], tue: [ { start: "00:00", end: "02:00", act: "Bartell - Cummerata", cancelled: true }, { start: "02:00", end: "04:00", act: "break" }, ], wed: [ { start: "00:00", end: "02:00", act: "A Perfect Circle" }, { start: "02:00", end: "04:00", act: "break" }, ], }; function playingWhen(whatDay) { for (let x = 0; x < whatDay.length; x++) { const currentDayShows = midgard[whatDay[x]]; // 可选:打印当前日期,让输出结构更清晰 console.log(`--- ${whatDay[x]} 的演出 ---`); for (let i = 0; i < currentDayShows.length; i++) { console.log(i, currentDayShows[i].act); } } } playingWhen(whatDay);
关键修改点
- 将
midgard.whatDay[x]改为midgard[whatDay[x]],通过变量动态访问对象的日期属性。 - 把
midgard的定义移到函数调用之前,确保函数执行时midgard已存在。 - 用
currentDayShows变量存储当前日期的演出数组,内层循环直接访问该变量,替换硬编码的mon为动态日期键。 - 新增日期标题打印,让输出结构更清晰(可选)。
内容的提问来源于stack exchange,提问作者Soma Juice
相关产品推荐
相关产品推荐

