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

moe*_*ley 6 javascript jslint switch-statement

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;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 5

就个人而言,我不希望switch在代码库中看到逆转.与平原if/elseif块相比,它不会给你任何东西,它的异国情调可能会导致混乱.

这也是JSLint抱怨的内容:

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

  • 我知道这都是个人偏好.但就我个人而言,我发现大量的if语句更加混乱. (5认同)

Den*_*nis 3

ECMA-262 标准的第三版(受 Firefox 1.0+、Google Chrome 1.0+、MSIE 5.5+ 等支持)定义:

switch (expression) {
    case label1:
        statements1
    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

statements1如果(expression)匹配则执行label1

这意味着你的switch陈述完全没问题。

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

编辑:

现在是猜测部分:

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

  • 它给我带来问题的原因是因为我工作的公司在他们的构建脚本中使用它,并且当 JSLint 返回“奇怪”时它会失败。我不知道 JSLint 中的错误是如何分类的,但我想这可能不是它的错。谢谢您的帮助。 (2认同)