JavaScript中如何实现每次for循环迭代时执行switch case判断
问题根因
代码仅输出最后一个月份是两个逻辑错误导致的:
switch分支判断写在for循环外部,循环跑完后monthChecker只会留存数组最后一个元素的值3,全程只执行了一次分支匹配,根本没有在每次迭代时做判断- 给DOM节点赋值时用了
=直接覆盖,就算把判断逻辑放进循环,前两次匹配到的内容也会被后一次的内容覆盖,最终只留最后一条
修正后完整代码
function display(){ const months = [1, 2, 3]; const monthDom = document.getElementById("monthName"); // 先清空容器原有内容 monthDom.innerHTML = ""; let monthChecker = ""; for (let i = 0; i < months.length; i++) { monthChecker = months[i]; let monthName, holiday1, holiday2; // switch移入循环内部,每次迭代都执行匹配 switch (monthChecker) { case 1: monthName = "January"; holiday1 = "New Years"; holiday2 = "MLK Day"; break; case 2: monthName = "February"; holiday1 = "Valentines"; holiday2 = "President's Day"; break; case 3: monthName = "March"; holiday1 = "Ash Wednesday"; holiday2 = "St. Patrick's Day"; break; default: monthName = "Not a valid month number"; holiday1 = ""; holiday2 = ""; } // 用+=追加内容,不要直接覆盖 monthDom.innerHTML += `${monthName} holidays include: ${holiday1} and ${holiday2}<br>`; } }
核心改动说明
- 将整个
switch判断逻辑移入for循环体内部,保证遍历到每个月份编号时都会执行分支匹配 - DOM内容赋值从
=替换为+=,每次匹配到的月份信息会追加到容器中,不会被后续内容覆盖 - 补充了循环内变量的声明,避免隐式创建全局变量的问题
- 提前缓存DOM节点,避免循环内重复查询DOM,执行效率更高
- 补全了代码中缺失的分号,避免自动分号插入可能引发的异常
内容的提问来源于stack exchange,提问作者oDx21
相关产品推荐
相关产品推荐

