上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

警钟长鸣 switch...case一定要记得写break或return

[复制链接]
  • TA的每日心情
    慵懒
    11 小时前
  • 签到天数: 811 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1555

    积分

    荣誉开发者

    积分
    1555

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-10-27 15:51:04 | 显示全部楼层 | 阅读模式

    本帖最后由 steven026 于 2023-10-27 16:40 编辑


    记2023年10月27日,DreamNya(就是我),debug一个半小时把GPT4干限额都没查出原因,最后偶然发现原因是swtich...case没写break😖😖😖,警钟长鸣。

    具体原理就不说了,反正记住case作用域一旦进入后,代码语句会忽略剩余的case条件一直运行直到break、return、throw语句出现或者swtich作用域结束为止,即使中间的case条件没有满足。


    举个例子:

    switch(true){
        case true:{
            console.log(true)
        }
        case false:{
            console.log(false)
        }
        default:{
            console.log('警钟长鸣')
        }
    }
    // 运行结果:ture, false, '警钟长鸣'

    上述代码进入switch作用域后首先遇到case true条件,因为true==true,所以会首先进入true作用域输出true,之后代码会忽略所有case条件包括default,并连续输出false警钟长鸣
    上述代码可以视作:

    switch(true){
        case true:{
            console.log(true)
            console.log(false)
            console.log('警钟长鸣')
        }
    }

    要想让swtich...case正常工作,应该养成良好习惯,在每个case作用域末尾都加上break或return或throw语句,强制让代码退出。
    正确代码如下

    switch (true) {
        case true: {
            console.log(true);
            break;
        }
        case false: {
            console.log(false);
            break;
        }
        default: {
            console.log('警钟长鸣');
        }
    }
    // 运行结果:true

    痛,真的是太痛了😭

    如果有条件的话建议使用ESLint
    这个规则是ESLint内置推荐规则
    https://eslint.nodejs.cn/docs/latest/rules/no-fallthrough

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4188

    回帖

    4055

    积分

    管理员

    积分
    4055

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-10-27 16:03:26 | 显示全部楼层
    哥哥来学go,go不用break/return
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    11 小时前
  • 签到天数: 811 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1555

    积分

    荣誉开发者

    积分
    1555

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-10-27 16:04:10 | 显示全部楼层

    王一之 发表于 2023-10-27 16:03

    哥哥来学go,go不用break/return

    学不动了 学不动了

    回复

    使用道具 举报

  • TA的每日心情
    难过
    2024-4-24 18:57
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    24

    主题

    31

    回帖

    281

    积分

    荣誉开发者

    积分
    281

    荣誉开发者油中2周年生态建设者喜迎中秋

    发表于 2023-10-27 22:12:47 | 显示全部楼层
    来投入 Webstorm 的怀抱吧, Webstorm 会对 fallthrough 的 switch 弹出警告 (笑
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表