我的开关结构似乎不起作用(JavaScript控制结构)

时间:2012-05-11 17:01:31

标签: javascript

浏览器中没有显示任何内容,因为JavaScript没有编译器来运行它,但我不知道如何检查这种语言中的错误。

我的HTML

<!doctype html>
<html>
  <head>
    <title>Where am I?></title>
    <script src="script4.js"></script>
  </head>
  <body>
  </body>
</html> 

我的script4.js

var number = 20;
switch(number) {
  case number > 0:
    alert(number + " is Positive");
    break;
  case number ===  0:
    alert(number + " is zero");
    break;
  case number < 0;
    alert(number + " is negative");
  default:
    alert(number + " is not a number");
}

3 个答案:

答案 0 :(得分:5)

JavaScript会将每个case表达式与switch值进行比较,因此您只需使用true的开关值就可以编写布尔案例表达式,例如:

switch(true) 
{
    case number > 0:
        alert(number + " is Positive");
        break;
    case number ===  0:
        alert(number + " is zero");
        break;
    case number < 0:
        alert(number + " is negative");
        break;
    default:
        alert(number + " is not a number");
}

JSFiddle example here

请注意,虽然这对我来说是一种常见的模式(以及我希望在其他语言中存在的功能,例如C#),但有些开发人员可能会发现它非常规。

答案 1 :(得分:3)

这不是通常使用switch语句的方式。 case的参数必须是数字,字符串或布尔值(在这种情况下,您可以使用解析为布尔值的表达式,但我不明白为什么您必须这样做而不是使用{ {1}};我发现后者更容易阅读和理解):

if

这里应该使用的是switch(number) { case 1: alert("number is 1"); break; ... ... default: alert("Unknown number"); }

if/else

使用布尔表达式时会发生的情况是if(number > 0) { alert("number is positive"); } else if(number === 0) { alert("number is zero"); } else if(number < 0) { alert("number is negative"); } else { alert("not a number"); } 的参数与switchtrue的布尔值进行比较。因此,您基本上将false的数值与numbertrue进行比较,并且永远不会匹配。

答案 2 :(得分:1)

我不知道RedFilter的解决方案是否可行。 (很高兴知道!)在大多数基于C语言中,您只能针对特定值进行操作。通常,使用if/else链:

if (number > 0) 
    alert(number + " is Positive");
else if (number === 0)
    alert(number + " is zero");
else if (number < 0)
    alert(number + " is negative");
else 
    alert(number + " is not a number");