javascript开关()或if()

ian*_*ace 2 javascript if-statement switch-statement

如果我这样做会更好:

if(message == 'redirect')
{
    is_valid.accepted = true;
}
else if(message == 'invalid id')
{
    is_valid.accepted = false;
}
else
{
    is_valid.accepted = false;
}
Run Code Online (Sandbox Code Playgroud)

或者我是这样做的

switch (message)
{
case 'invalid id':
default:
    is_valid.accepted = false;
    break;
case 'redirect':
    is_valid.accepted = true;
    break;
}
Run Code Online (Sandbox Code Playgroud)

nin*_*cko 8

switch如果您预见到需要添加大量新案例,则可以使用.

如果您不会添加许多新案例,我可能会这样做,为清楚起见:

is_valid.accepted = message=='redirect';
Run Code Online (Sandbox Code Playgroud)

(另请注意,您对'无效ID'的检查无效)

然而,如果你不得不添加新的东西,请注意它是如何好的你不必重复自己不必重复自己不必重复自己,还有性感的格式:

switch (message)
{
    case 'invalid id':
    case 'penguin invasion':
    case 'the internet is down':
    case 'error not enough caffeine':
        is_valid.accepted = false;
        break;

    case 'redirect':
    case 'upvote me':
    case 'vip':
    case 'flamewar':
        is_valid.accepted = true;
        break;

    default:
        is_valid.accepted = false;
        // perhaps log or something
}
Run Code Online (Sandbox Code Playgroud)

想象一下所有那些丑陋的其他人,如果你不这样做的话.


旁注:如果你有非常复杂的规则,但仍然是白名单 - 单一标志范例的黑名单,那么:

var blacklist = ['invalid id', 'penguin invasion', 'the internet is down' 'error not enough caffeine'];
var whitelist = ['redirect', 'upvote me', 'vip', 'flamewar'];

is_valid.accepted = whitelist.indexOf(message)!=-1;
Run Code Online (Sandbox Code Playgroud)

如果要动态构建白名单,也可以执行此操作.