繁体   English   中英

switch语句中的常见情况

[英]Common case in 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无效。 我想念什么?

Switch-case的工作方式如下:将控件从switch语句转移到第一个匹配项,然后执行所有语句(包括其他情况下的语句),直到遇到break语句。 这种行为被称为fallthrough。

因此,无论何时遇到这种情况,

case 'foo':
case 'bar':
    console.log('its foo or bar');

这种情况通常称为:

 case 'foo':
    console.log('its foo');

原因是在第一个代码段之后没有break语句。 因此,控件继续执行语句,直到遇到break语句为止。

@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个嵌套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;
    }
});

尝试这个 :)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM