我正在尝试编写一个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)。为什么会这样?我该如何解决这个问题?
答案 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);
}
当然,下面两个案例永远不会执行。您最好只使用if
和else 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)
逻辑运算符&&
,||
和!
始终返回true
或false
,因此可能的切换案例只有true和false。你应该只使用字符串或数字的情况。