JavaScript多变量匹配switch case使用_通配符报错如何解决
错误原因
- JavaScript的switch语句不原生支持多参数匹配,switch括号内的逗号分隔表达式属于逗号运算符,最终只会返回最后一个表达式
user.emailInDB === userInputFrontend的结果,无法实现同时判断三个条件的需求。 - JavaScript语法中不存在
_作为通配符的用法,你没有提前定义名为_的变量,所以会抛出_ is not defined的报错。
调整方案
方案1:使用switch匹配数组标识(适合有多个组合判断的场景)
你可以把三个布尔匹配结果拼接为可匹配的标识,在case中对应你需要的模式即可:
// 把三个匹配结果转为字符串作为匹配key const matchKey = [ user.nameInDB === userInputMobile, user.phoneInDB === userNumberInputMobile, user.emailInDB === userInputFrontend ].toString() switch (matchKey) { // 对应第一个为true,其余任意的场景,可按需求调整case内容 case 'true,false,false': case 'true,true,false': case 'true,false,true': case 'true,true,true': // Do something 第一个匹配逻辑 break // 对应第一个为false、第二个为true的场景 case 'false,true,false': case 'false,true,true': // Do something else 第二个匹配逻辑 break // 对应前两个为false、第三个为true的场景 case 'false,false,true': // Do last thing 第三个匹配逻辑 break default: break }
方案2:直接使用if else分支(适合按优先级判断的场景,代码更直观)
如果你的分支逻辑是按优先级匹配,只要符合某一个条件就执行对应逻辑,直接写if else可读性更高:
const isNameMatch = user.nameInDB === userInputMobile const isPhoneMatch = user.phoneInDB === userNumberInputMobile const isEmailMatch = user.emailInDB === userInputFrontend if (isNameMatch) { // Do something } else if (isPhoneMatch) { // Do something else } else if (isEmailMatch) { // Do last thing }
内容的提问来源于stack exchange,提问作者DaemonS
相关产品推荐
相关产品推荐

