0

浏览器中没有显示任何内容,并且由于 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");
}
4

3 回答 3

5

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

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 示例在这里

请注意,虽然这对我来说是一种常见的模式(并且我希望在其他语言(如 C#)中存在一个特性),但一些开发人员可能会觉得它非常规。

于 2012-05-11T17:05:04.860 回答
3

这不是switch通常使用语句的方式。to 的参数case必须是数字、字符串或布尔值(在这种情况下,您可以使用解析为布尔值的表达式,但我不明白为什么您必须这样做而不是使用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");
}

使用布尔表达式时会发生的情况是,将 to 的参数与orswitch的布尔值进行比较。因此,您基本上是在比较与or的数值,而这永远不会匹配。truefalsenumbertruefalse

于 2012-05-11T17:04:58.073 回答
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");
于 2012-05-11T17:04:53.360 回答