Javascript switch语句 - 默认首先确定?

时间:2016-08-03 00:04:55

标签: javascript cross-browser switch-statement

这与default as first option in switch statement?非常相似,但是关于JS而不是PHP。

我有一个辅助函数,它包含另一个函数的各种调用样式。包装函数至少需要一个,最多可以接受4个参数。这个最小的代码示例很好地描述了我正在做的事情,它在我的Chrome和FF版本中运行良好。

function testSwitch(definition) {
    var term, minLength, boundaryStart, boundaryEnd;
    switch (definition.length) {
        default:
    case 4:
        boundaryEnd = definition[3];
    case 3:
        boundaryStart = definition[2];
    case 2:
        minLength = definition[1];
    case 1:
        term = definition[0];
        break;
    case 0:
        console.log('fail')
        return;
    }
    console.log(term, minLength, boundaryStart, boundaryEnd);
}

(在实际用例中,它们被传递给实际函数而不是console.log)。因此,想法是通过案例,允许提供太多参数(但忽略额外的参数),但如果提供的定义为空则失败。

所以我从我的测试中知道,这似乎至少在某些浏览器中有效,我可以依赖于在最近的合理浏览器中工作吗(例如iOS / Android设备,IE8 +,Edge等)?我知道排除break语句是明确定义的行为并且相当广泛地使用,但是我不确定将默认情况放在第一位并且是空的(例如,如果某些浏览器JS引擎会优化空的默认情况,那么这并不是'#39 ; t为我工作,因为当使用大小为5的数组调用时,它将无法工作。

1 个答案:

答案 0 :(得分:2)

我以前从没见过有人使用这种方法。它很聪明。作为旁注,巧妙的是一把双刃刀片;如果这是代码,除了你以外的任何人都会触及,我强烈建议在那里发表评论以明确表示你是故意这样做的,或者某人会改变它(因为它看起来错了')并打破它没有意识到意图。

documentation indicates default不需要是最后一个条款。

如果您发现浏览器不起作用,您可以稍微修改它并避免使用default

function testSwitch(definition) {
    var term, minLength, boundaryStart, boundaryEnd;
    switch (definition.length > 4 ? 5 : definition.length) {
    case 5:
    case 4:
        boundaryEnd = definition[3];
    case 3:
        boundaryStart = definition[2];
    case 2:
        minLength = definition[1];
    case 1:
        term = definition[0];
        break;
    case 0:
        console.log('fail')
        return;
    }
    console.log(term, minLength, boundaryStart, boundaryEnd);
}