Switch语句在JavaScript中的多种情况
我需要JavaScript中switch语句中的多个case,例如:Switch语句在JavaScript中的多种情况,javascript,switch-statement,Javascript,Switch Statement,我需要JavaScript中switch语句中的多个case,例如: switch (varName) { case "afshin", "saeed", "larry": alert('Hey'); break; default: alert('Default case'); break; } var varName = "afshin" sw
switch (varName)
{
case "afshin", "saeed", "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}
var varName = "afshin"
switch (varName) {
case (["afshin", "saeed", "larry"].indexOf(varName)+1 && varName):
console.log("hey");
break;
default:
console.log('Default case');
}
我该怎么做?如果在JavaScript中没有这样做的方法,我想知道一个替代解决方案,它也遵循。使用
开关的fall-through特性。匹配的案例将一直运行,直到找到break
(或switch
语句的结尾),因此您可以像这样编写:
switch (varName)
{
case "afshin":
case "saeed":
case "larry":
alert('Hey');
break;
default:
alert('Default case');
}
在Javascript中,要在一个开关中分配多个case,我们必须定义不同的case,而不在两者之间中断,如下所示:
<script>
function checkHere(varName){
switch (varName)
{
case "saeed":
case "larry":
case "afshin":
alert('Hey');
break;
case "ss":
alert('ss');
break;
default:
alert('Default case');
break;
}
}
</script>
函数checkHere(varName){
开关(varName)
{
案例“saeed”:
“拉里”案:
“afshin”案:
警惕(‘嘿’);
打破
案例“ss”:
警报(“ss”);
打破
违约:
警报(“默认情况”);
打破
}
}
请参见示例单击以下是避免使用开关的不同方法
语句:
var cases = {
afshin: function() { alert('hey'); },
_default: function() { alert('default'); }
};
cases.larry = cases.saeed = cases.afshin;
cases[ varName ] ? cases[ varName ]() : cases._default();
如果您使用的是ES6,则可以执行以下操作:
if (['afshin', 'saeed', 'larry'].includes(varName)) {
alert('Hey');
} else {
alert('Default case');
}
if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
alert('Hey');
} else {
alert('Default case');
}
alert([
"afshin",
"saeed",
"larry",
"sasha",
"boby",
"jhon",
"anna",
// ...
].includes(varName)? 'Hey' : 'Default case')
或者对于早期版本的JavaScript,您可以执行以下操作:
if (['afshin', 'saeed', 'larry'].includes(varName)) {
alert('Hey');
} else {
alert('Default case');
}
if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
alert('Hey');
} else {
alert('Default case');
}
alert([
"afshin",
"saeed",
"larry",
"sasha",
"boby",
"jhon",
"anna",
// ...
].includes(varName)? 'Hey' : 'Default case')
请注意,这在较旧的IE浏览器中不起作用,但您可以相当轻松地修补这些问题。有关更多信息,请参见问题。您可以使用中的“”运算符
它依赖于对象/散列调用,因此速度尽可能快
// Assuming you have defined functions f(), g(a) and h(a,b)
// somewhere in your code,
// you can define them inside the object, but...
// the code becomes hard to read. I prefer it this way.
o = { f1:f, f2:g, f3:h };
// If you use "STATIC" code can do:
o['f3']( p1, p2 )
// If your code is someway "DYNAMIC", to prevent false invocations
// m brings the function/method to be invoked (f1, f2, f3)
// and you can rely on arguments[] to solve any parameter problems.
if ( m in o ) o[m]()
在Node.js中,似乎允许您执行以下操作:
data = "10";
switch(data){
case "1": case "2": case "3": // Put multiple cases on the same
// line to save vertical space.
console.log("small");
break;
case "10": case "11": case "12":
console.log("large");
break;
default:
console.log("strange");
break;
}
在某些情况下,这使得代码更加紧凑。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Example1</title>
<link rel="stylesheet" href="css/style.css" >
<script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
<script>
function display_case(){
var num = document.getElementById('number').value;
switch(num){
case (num = "1"):
document.getElementById("result").innerHTML = "You select day Sunday";
break;
case (num = "2"):
document.getElementById("result").innerHTML = "You select day Monday";
break;
case (num = "3"):
document.getElementById("result").innerHTML = "You select day Tuesday";
break;
case (num = "4"):
document.getElementById("result").innerHTML = "You select day Wednesday";
break;
case (num = "5"):
document.getElementById("result").innerHTML = "You select day Thusday";
break;
case (num = "6"):
document.getElementById("result").innerHTML = "You select day Friday";
break;
case (num = "7"):
document.getElementById("result").innerHTML = "You select day Saturday";
break;
default:
document.getElementById("result").innerHTML = "You select day Invalid Weekday";
break
}
}
</script>
</head>
<body>
<center>
<div id="error"></div>
<center>
<h2> Switch Case Example </h2>
<p>Enter a Number Between 1 to 7</p>
<input type="text" id="number" />
<button onclick="display_case();">Check</button><br />
<div id="result"><b></b></div>
</center>
</center>
</body>
例1
函数显示\u case(){
var num=document.getElementById('number')。值;
开关(num){
案例(num=“1”):
document.getElementById(“结果”).innerHTML=“您选择了周日”;
打破
案例(num=“2”):
document.getElementById(“结果”).innerHTML=“选择星期一”;
打破
案例(num=“3”):
document.getElementById(“结果”).innerHTML=“选择星期二”;
打破
案例(num=“4”):
document.getElementById(“结果”).innerHTML=“选择星期三”;
打破
案例(num=“5”):
document.getElementById(“结果”).innerHTML=“选择星期四”;
打破
案例(num=“6”):
document.getElementById(“结果”).innerHTML=“选择星期五”;
打破
案例(num=“7”):
document.getElementById(“结果”).innerHTML=“您选择星期六”;
打破
违约:
document.getElementById(“结果”).innerHTML=“您选择的日期无效工作日”;
打破
}
}
开关箱示例
输入一个介于1到7之间的数字
检查
只需更改开关条件方法:
switch (true) {
case (function(){ return true; })():
alert('true');
break;
case (function(){ return false; })():
alert('false');
break;
default:
alert('default');
}
function isAccessible(varName){
let accessDenied = ['Liam', 'Noah', 'William', 'James', 'Logan', 'Benjamin',
'Mason', 'Elijah', 'Oliver', 'Jacob', 'Daniel', 'Lucas'];
switch (varName) {
case (accessDenied.includes(varName) ? varName : null):
return 'Access Denied!';
default:
return 'Access Allowed.';
}
}
console.log(isAccessible('Liam'));
这适用于常规JavaScript:
function theTest(val) {
var answer = "";
switch( val ) {
case 1: case 2: case 3:
answer = "Low";
break;
case 4: case 5: case 6:
answer = "Mid";
break;
case 7: case 8: case 9:
answer = "High";
break;
default:
answer = "Massive or Tiny?";
}
return answer;
}
theTest(9);
你可以这样写:
switch (varName)
{
case "afshin":
case "saeed":
case "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}
switch (true){
case /Pressure/.test(sensor):
{
console.log('Its pressure!');
break;
}
case /Temperature/.test(sensor):
{
console.log('Its temperature!');
break;
}
}
视情况而定。计算一次且仅计算一次。在一场比赛中,所有随后的案件陈述,直到“中断”火灾,无论案件说什么
var onlyMen=true;
var only女性=假;
var onlyAdults=假;
(功能(){
开关(真){
仅限案例人员:
console.log(“onlymen”);
仅限案例女性:
console.log(“仅限女性”);
仅限案例成人:
console.log('onlyAdults');
打破
违约:
console.log('default');
}
})(); // 仅返回仅限男性仅限女性成人
添加和澄清后,您可以使用表达式动态设置开关中条件的值,例如:
var i = 3
switch (i) {
case ((i>=0 && i<=5) ? i : -1):
console.log('0-5');
break;
case 6: console.log('6');
}
虽然它是如此之多…在一个switch语句中执行多个case的另一种方法,但在函数中:
函数名(varName){
开关(varName){
“afshin”一案:
“赛义德”一案:
“拉里”案:
返回“嘿”;
违约:
返回“默认情况”;
}
}
console.log(名称('afshin'));//嘿
我这样使用它:
switch (varName)
{
case "afshin":
case "saeed":
case "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}
switch (true){
case /Pressure/.test(sensor):
{
console.log('Its pressure!');
break;
}
case /Temperature/.test(sensor):
{
console.log('Its temperature!');
break;
}
}
我可以看到这里有很多很好的答案,但是如果我们需要检查超过10个案例,会发生什么呢?以下是我自己的方法:
switch (true) {
case (function(){ return true; })():
alert('true');
break;
case (function(){ return false; })():
alert('false');
break;
default:
alert('default');
}
function isAccessible(varName){
let accessDenied = ['Liam', 'Noah', 'William', 'James', 'Logan', 'Benjamin',
'Mason', 'Elijah', 'Oliver', 'Jacob', 'Daniel', 'Lucas'];
switch (varName) {
case (accessDenied.includes(varName) ? varName : null):
return 'Access Denied!';
default:
return 'Access Allowed.';
}
}
console.log(isAccessible('Liam'));
上述方法的问题在于,每次调用带有开关的函数时,都必须重复几个案例。更可靠的解决方案是使用地图或字典
以下是一个例子:
//地图,按概念划分
变量字典={
时间段:{
“月”:[1,“月”、“月”、“月”、“月”],
‘两个月’:[2,‘两个月’、‘两个月’、‘双亲’、‘双亲’],
‘三个月’:[3,‘三个月’、‘季度’、‘三个月’],
‘学期’:[4,‘学期’、‘学期’、‘半年’],
‘年’:[5,‘年’、‘年’、‘无’]
},
距离:{
“公里”:[1,‘公里’、‘公里’、‘公里’、‘公里’],
“英里”:[2,“英里”,“英里],
‘北欧英里’:[3,‘北欧英里’、‘10公里’、‘斯堪的纳维亚英里’]
},
燃油量:{
‘ltr’:[1,‘l’、‘l’、‘l’、‘l’、‘l’、‘l’],
‘加仑(进口)’:[2,‘进口加仑’、‘英制加仑’、‘加仑(英国)’,
‘美国加仑’[3,‘美国加仑’、‘美国加仑’],
‘kWh’:[4,‘kWh’]
}
};
//此函数将每个输入映射到特定的定义值
功能映射单元(概念、值){
for(字典中的var键[概念]){
如果(键===值||
字典[概念][键].indexOf(值)!=-1){
返回键
}
}
抛出错误('Uknown'+value+'表示“'+concept+'”)
}
//你会告诉我们的