JavaScript聊天机器人响应函数if转switch语句出错问题
适配原有逻辑的Switch语句正确实现
JavaScript 中 switch 语句的执行逻辑为:将括号内传入的表达式结果,依次和每个 case 后的值做严格相等比对,匹配成功则进入对应分支执行;相邻case如果没有break会发生穿透,可用来复用相同的处理逻辑。
完整正确代码如下:
function chatbotResponse() { talking = true; // 初始化默认兜底回复 botMessage = "Desculpe não entendi"; switch (lastUserMessage) { // 两个case相邻无break,输入hi或hello都会触发同一段回复逻辑 case 'hi': case 'hello': const hiReplyPool = ['hi','howdy','hello']; botMessage = hiReplyPool[Math.floor(Math.random() * hiReplyPool.length)]; break; case 'name': botMessage = 'My name is ' + botName; break; } }
之前的尝试写法存在几处语法和逻辑偏差:
- case 后错误书写了完整的判断表达式:按照switch的执行规则,case后写
lastUserMessage === 'hi'会得到布尔值true/false,和括号内传入的字符串类型的lastUserMessage永远无法严格相等,所有分支都不会命中 - 分支逻辑错配:原本对应
name匹配的回复内容被放到了打招呼的分支下,还重复写了两次完全相同的打招呼分支 - 遗漏原逻辑覆盖的匹配场景:原代码里用户输入
hello也要触发随机打招呼回复,之前的switch写法完全没覆盖这个场景 - 未保留原代码的兜底逻辑:原代码默认回复是听不懂的那句,当输入不匹配任何case时,直接保留提前设置好的默认值即可,不需要额外在
default中重复赋值
内容的提问来源于stack exchange,提问作者Paulo Roberto
相关产品推荐
相关产品推荐

