switch语句中的常见情况

时间:2018-07-05 05:56:50

标签: javascript switch-statement

我需要先执行普通情况,然后再执行特定情况,所以这就是我正在做的事情:

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无效。我想念什么?

4 个答案:

答案 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;
    }
});