我能否在JavaScript的switch语句中检查不等情况?

9
var t = "TEST";
switch(t){
    case !"TEST": /* <- does not work. Can you check if t does NOT contain a string? */
        alert("t != TEST");
    break;
}

你能用 switch 语句完成这个任务吗?

3
在JavaScript中,使用switch(true)并在其中使用逻辑表达式作为case语句当其求值为true/false时是可行的...但这不是switch语句的“本意”。对于您的简单示例来说,一个简单的if语句会更好。 - CBroe
这个例子被隔离出来,与一个更加复杂的情况无关。感谢您的评论 CBroe! - subZero
1
你为什么不直接使用 if 呢? - ComFreek
1
@subZero 那么它就不应该包含在 switch 语句中,因为它将始终寻找 true。 - MackieeE
@subZero,我不知道你是否已经查看了我的答案,但如果是的话,我刚刚进行了一些编辑。请看看是否符合您的需求。 - matewka
5个回答

12

你也可以这样做:

var str = "TEST";

switch (true) {
    case (str !== "TEST") :
        alert("str !== TEST");
        break;
    case (str === null) :
        alert("str is null");
        break;
    default:
        alert("default trigger");
}

5
你可以使用 if 条件语句。如果你更喜欢 switch 语句,可以在其中使用一个 “default” 分支和一个 if 条件语句,如下所示:
default:
    if(n == -1){
        //Your code
    }
    break;

3
如果你选择这种方式,最好放弃switch语句而使用if else。 - jamiescript

3

case语句总是寻找真值。由于您实际上想检查变量是否为字符串(根据您代码中的评论),也许这种方法对您来说是正确的:

var t = "TEST";
switch(typeof t){
    case "string":
    break;
    default:
        alert("t is not a string");
    break;
}

编辑
如果你在实际代码中有更多的情况,下面的代码也许能完成工作?

var t = "TEST";
switch(t){
    case t:
        if ("string" != typeof t) {
            alert("t is not a string");
            break;
        }
    case "TEST":
        alert("case 2");
        break;
    case "something_else":
        alert("case 3");
        break;
}

这里有一个示例代码片段:http://jsfiddle.net/Rz7Sf/。 将t变量值替换为整数,你应该可以看到正确的警报。


2
你可以使用 typeof 来判断数据类型:
<script>
        var t =((typeof "Test")=='string')?true:false;
        switch(t){
            case false:
                alert("t != TEST");
                break;
        }
</script>

1
假设我们有:
var t = "TEST";
switch(t){
    case "TEST": 
        break;
    default:
        alert("This is the case you want");
        break;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接