我需要先执行普通情况,然后再执行特定情况,所以这就是我正在做的事情:
let array = ['foo', 'bar', 'baz'];
array.forEach(element => {
switch (element) {
case 'baz':
console.log('its baz');
break;
case 'foo':
case 'bar':
console.log('its foo or bar');
case 'foo':
console.log('its foo');
break;
case 'bar':
console.log('its bar');
break;
default:
break;
}
});
输出:
its foo or bar
its foo
its foo or bar
its foo // expected: 'its bar'
its baz
它对foo
有效,但对bar
无效。我想念什么?
答案 0 :(得分:3)
switch-case以这种方式工作:将控件从switch语句转移到第一个匹配项,然后执行所有语句(包括其他情况下的语句),直到遇到break语句。这种行为被称为“失败”。
所以,只要这种情况被交换机捕获,
case 'foo':
case 'bar':
console.log('its foo or bar');
这种情况通常称为:
case 'foo':
console.log('its foo');
原因是第一个代码段后没有break语句。因此,控件继续执行语句,直到遇到break语句为止。
答案 1 :(得分:2)
@SHRAIYSH已经说明了您所面临的情况。以下是您可能正在寻找的另一种解决方案
let array = ['foo', 'bar', 'baz'];
array.forEach(element => {
switch (element) {
case 'baz':
console.log('its baz');
break;
case 'foo':
case 'bar':
console.log('its foo or bar');
if(element==='foo'){
console.log('its inner foo');
}else{
console.log('its inner bar')
}
break;
case 'foo':
console.log('its foo');
break;
case 'bar':
console.log('its bar');
break;
default:
break;
}
});
在处理switch
语句时,它只能满足一种情况。因此,除了使用仅满足foo的sideEffect之外,还可以在案例中使用另一个if else
答案 2 :(得分:0)
您必须使用2条嵌套的switch
语句,如下所示:
let array = ['foo', 'bar', 'baz'];
array.forEach(element => {
switch (element) {
case 'baz':
console.log('its baz');
break;
case 'foo':
case 'bar':
console.log('its foo or bar');
switch (element) {
case 'foo':
console.log('its foo');
break;
case 'bar':
console.log('its bar');
break;
}
default:
break;
}
});
答案 3 :(得分:0)
尝试一下:)
let array = ['foo', 'bar', 'baz'];
array.forEach(element => {
switch (element) {
case 'baz':
console.log('its baz');
break;
case 'foo':
case 'bar':
console.log('its foo or bar');
case 'foo':
if (element === 'foo') {
console.log('its foo');
break;
}
case 'bar':
console.log('its bar');
break;
default:
break;
}
});