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;
}
答案 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语句拒绝任何合并请求,因为实际上我无法想到无法用更简单和/或更易于阅读的东西代替它的情况。