反向切换语句是否可以接受JavaScript?

时间:2011-10-05 08:31:11

标签: javascript switch-statement jslint

JSLint抱怨(true)weird condition。如果我没有在反向切换声明中使用它,这是可以理解的。那么JSLint是错误的还是我不应该使用反向切换语句?

感谢您的帮助/启发。

switch (true) {
    case (menuLinksLength < 4):
        numberOfColumns = 1;
        break;
    case (menuLinksLength > 3 && menuLinksLength < 7):
        numberOfColumns = 2;
        break;
    case (menuLinksLength > 6 && menuLinksLength < 10):
        numberOfColumns = 3;
        break;
    case (menuLinksLength > 9):
        numberOfColumns = 4;
        break;
    default:
        numberOfColumns = 0;
}

3 个答案:

答案 0 :(得分:5)

我个人不希望在代码库中看到反转的switch。与普通if/elseif区块相比,它不会给你任何东西,它的异国情调可能会导致混乱。

这也是JSLint抱怨的内容:

  

你正在做一些非正统的事情。它有充分的理由吗?如果   不,坚持基础可能会更好。

答案 1 :(得分:3)

ECMA-262标准的第三版(由Firefox 1.0 +,Google Chrome 1.0 +,MSIE 5.5+等支持)定义了

switch (expression) {
    case label1:
        statements1
    .
    .
    .
}
如果statements1(expression)匹配,则

执行label1

这意味着您的switch声明完全正常。

我在Firefox,Chrome和IE上尝试过。没有抱怨...

修改

现在是猜测部分:

JSLint是一个代码anaylisis工具。当它看到switch (true)时,它会假定您不知道自己在做什么。 奇怪并不一定意味着错误 ......

答案 2 :(得分:2)

numberOfColumns = Math.max(4, Math.floor(menuLinksLength / 3));

这将为您提供与现有代码相同的结果。您的问题相当含糊,因为“可接受”是一个非常主观的术语。我个人会使用反向switch语句拒绝任何合并请求,因为实际上我无法想到无法用更简单和/或更易于阅读的东西代替它的情况。