带有逻辑和的打字稿开关案例

时间:2017-03-05 18:21:50

标签: javascript typescript switch-statement

我正在尝试编写一个switch语句,但它看起来并不像我想要的那样。

<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8">

  <title></title>
  <meta name="description" content="">
  <meta name="author" content="">

  <link rel="" href="">

  
</head>

<body>
  <script src=""></script>
  
  <form action="http://yourdomain.com/reg.php" method="post">
  <label>First name: <input type="text" name="firstname"><br>
  <label>Last name: <input type="text" name="lastname"><br>
  <input type="submit" value="Submit">
  <input type="reset" value="Reset">
  </form>
  
</body>
</html>

警报给出2和1,但返回的值是(1&amp;&amp; 1)。为什么会这样?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:9)

你不能像那样使用switch(1 && 1) == (2 && 1) == 1(1 && 2) == (2 && 2) == 2,所以你做的相当于:

getExerciseDescription(exerciseId, intensity_level){

    alert(exerciseId + " " + intensity_level)

    switch (exerciseId && intensity_level) {
        case (1):
        this.header="Exercise 1 Level 1";
        this.instructions="Exercise 1 Level 1";
        break;
        case (2):
        this.header="Exercise 1 Level 2";
        this.instructions="Exercise 1 Level 2";
        break;  


        case (1):
        this.header="Exercise 2 Level 1";
        this.instructions="Exercise 2 Level 1";
        break;  
        case (2):
        this.header="Exercise 2 Level 2";
        this.instructions="Exercise 2 Level 2";
        break;

        default:
        this.header="Default";
        this.instructions="Default";
        break;
    }

    return new Popup(this.header, this.instructions);
} 

当然,下面两个案例永远不会执行。您最好只使用ifelse if语句,或者如果需要,可以使用嵌套开关。

您还可以执行以下操作:

switch (exerciseId + " " + intensity_level) {
    case("1 1"): ...
    case("1 2"): ...
    case("2 1"): ...
    case("2 2"): ...

答案 1 :(得分:1)

这不是switch语句的评估方式。对于您的场景,它将始终评估为逻辑和&&中的第二个整数。

(有关Logical Operators的更多信息)

  

逻辑AND(&amp;&amp;)

     

expr1 && expr2

     

如果可以转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,&amp;&amp;如果两个操作数都为真,则返回true;否则,返回false。

您实际上甚至不需要使用开关,您可以使用简单的if

来编写它
if (exerciseId <= 2 && intensity_level <= 2){
    this.header=`Exercise ${exerciseId} Level ${intensity_level}`;
    this.instructions=`Exercise ${exerciseId} Level ${intensity_level}`;
} else {
    this.header="Default";
    this.instructions="Default";
}

答案 2 :(得分:0)

逻辑运算符&&||!始终返回truefalse,因此可能的切换案例只有true和false。你应该只使用字符串或数字的情况。