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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:24:35