考虑这段代码和输出:
var f = function(x){
switch(x){
case 1:
3 + 2 > 3 && (console.log("case 1"));
break;
case 2:
4 + 2 < 20 && (console.log("case 2"));
break;
case 3:
true && console.log("case 3");
break;
case 4:
false && console.log("case 4");
}
};
for(var i = 0; i < 6; i++){
f(i)
}
输出:
case 1
case 2
case 3
我收到JsHint的投诉说
"Expected an assignment or function call and instead saw an expression"
第4行,第7行,第10行和第13行的。这适用于包含“&amp;&amp;”的每一行。我设法通过使用Switch语句中的函数来逃避这一点,例如:
case1:
function a() {3 + 2 > 3 && (console.log("case 1"))}
a()
break;
等
我想知道为什么JsHint会发出此警告,是否有更好的方法来解决警告问题?
答案 0 :(得分:2)
请记住,JSHint只是关于什么&#34; good&#34;的一系列意见的体现。代码就像。在这里,它实质上告诉您,它不赞成您使用&&
运算符来控制流程。你可以通过切换到一个简单的if
语句来使它变得快乐:
case 1:
if (3 + 2 > 3) console.log("case 1");
break;
答案 1 :(得分:1)
在逻辑上,switch语句与多个If / Else语句类似。
所以:
switch(x){
case 1:
3 + 2 > 3 && (console.log("case 1"));
break;
case 4:
false && console.log("case 4");
}
相当于:
if (x == 1){
3 + 2 > 3 && (console.log("case 1"));
} else if (x == 4) {
false && console.log("case 4");
}
正如您可能看到的那样,仅使用逻辑条件通常没有意义。你通常想要真正做某事,例如任务或功能。 JSHint警告你可能有错误。