JsHint:"期望一个赋值或函数调用,而是看到一个表达式",Switch语句

时间:2015-03-04 17:01:51

标签: javascript switch-statement jshint

考虑这段代码和输出:

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会发出此警告,是否有更好的方法来解决警告问题?

2 个答案:

答案 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警告你可能有错误。