我需要在JavaScript开关语句的多个情况下,类似于:
switch (varName)
{
case "afshin", "saeed", "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}
我该怎么做呢?如果在JavaScript中没有办法做这样的事情,我想知道一个也遵循DRY概念的替代解决方案。
我需要在JavaScript开关语句的多个情况下,类似于:
switch (varName)
{
case "afshin", "saeed", "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}
我该怎么做呢?如果在JavaScript中没有办法做这样的事情,我想知道一个也遵循DRY概念的替代解决方案。
当前回答
只需改变开关条件方法:
switch (true) {
case (function(){ return true; })():
alert('true');
break;
case (function(){ return false; })():
alert('false');
break;
default:
alert('default');
}
其他回答
如果您的case条件很复杂,需要很多case值匹配,或者需要动态值匹配,那么最好将case匹配逻辑移动到处理程序子函数中。
在您的情况下,如果您有成千上万的用户名来匹配安全权限检查,这种方法是更清晰的选项,更可扩展,可以暴露高级多路分支逻辑,而不会陷入一长串case语句中。
switch (varName)
{
case checkPatternAdministrator(varName):
alert('Hey');
break;
case checkPatternUserTypeA(varName):
alert('Hey2');
break;
case checkPatternUserTypeB(varName):
alert('Hey3');
break;
default:
alert('Default case');
break;
}
function checkPatternAdministrator(varName) {
// Logic to check Names against list, account permissions etc.
// return the varName if a match is found, or blank string if not
var matchedAdministratorName = varName;
return matchedAdministratorName;
}
如果你正在使用ES6,你可以这样做:
if (['afshin', 'saeed', 'larry'].includes(varName)) {
alert('Hey');
} else {
alert('Default case');
}
或者对于JavaScript的早期版本,你可以这样做:
if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
alert('Hey');
} else {
alert('Default case');
}
注意,include在一些浏览器(包括旧版本的IE)中不能工作,但你可以很容易地修补它。有关更多信息,请参阅javascript中确定字符串是否在列表中的问题。
视情况而定。Switch计算一次且仅计算一次。在匹配时,所有后续的case语句直到“break”火,无论case说什么。
var onlyMen = true; var onlyWomen = false; var only成人= false; (函数(){ 开关(真){ 案例onlyMen: console.log(“onlymen”); 案例onlyWomen: console.log(“onlyWomen”); 案例onlyAdults: console.log(“onlyAdults”); 打破; 默认值: console.log(“违约”); } }) ();//只返回男人,只返回女人,只返回成年人 < script src = " https://getfirebug.com/firebug-lite-debug.js " > < /脚本>
switch语句用于根据条件从许多代码块中选择要执行的一个
switch表达式中的值与提供的不同值进行比较 如果匹配,则执行与之相关的代码块 如果没有匹配,则执行默认块
语法:
switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}
注意: 必须注意的是,如果省略了break语句,那么即使它们与switch表达式不匹配,下一个块也将被执行。因此,如果不想获得指定的行为,不要忘记在每个代码块的末尾添加break语句
一个实际的例子: 下面的代码基于一个整数(由'new Date().getDay()'提供)以字符串形式返回一周中的当前日期。
switch (new Date().getDay()) {
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
}
代码样本取自W3Schools
对我来说,这是最简单的方法:
switch (["afshin","saeed","larry"].includes(varName) ? 1 : 2) {
case 1:
alert('Hey');
break;
default:
alert('Default case');
break;
}