Ich versuche, eine switch-Anweisung zu schreiben, aber es scheint nicht so zu funktionieren, wie ich es will.
getExerciseDescription(exerciseId, intensity_level){
alert(exerciseId + " " + intensity_level)
switch (exerciseId && intensity_level) {
case (1 && 1):
this.header="Exercise 1 Level 1";
this.instructions="Exercise 1 Level 1";
break;
case (1 && 2):
this.header="Exercise 1 Level 2";
this.instructions="Exercise 1 Level 2";
break;
case (2 && 1):
this.header="Exercise 2 Level 1";
this.instructions="Exercise 2 Level 1";
break;
case (2 && 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);
}
Die Warnungen geben 2 und 1, aber der zurückgegebene Wert ist für (1 && 1). Wieso ist es so? Wie kann ich das beheben?
Sie können eine switch
einfach nicht so verwenden. (1 && 1) == (2 && 1) == 1
und (1 && 2) == (2 && 2) == 2
, also machen Sie das Äquivalent von:
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);
}
Natürlich werden die beiden unteren Fälle niemals ausgeführt. Sie sollten besser nur if
- und else if
-Anweisungen verwenden oder, falls gewünscht, auch geschachtelte Schalter verwenden.
Sie könnten auch so etwas tun:
switch (exerciseId + " " + intensity_level) {
case("1 1"): ...
case("1 2"): ...
case("2 1"): ...
case("2 2"): ...
So wird eine switch
-Anweisung nicht bewertet. Für Ihr Szenario wird immer die 2. Ganzzahl im logischen und &&
ausgewertet.
(Weitere Informationen zu Logische Operatoren )
Logisches AND (&&)
expr1 && expr2
Gibt expr1 zurück, wenn es in false konvertiert werden kann. Andernfalls wird Ausdruck2 zurückgegeben. Bei Verwendung mit booleschen Werten gibt && also true zurück, wenn beide Operanden true sind. Andernfalls wird false zurückgegeben.
Sie brauchen eigentlich nicht einmal einen Schalter, Sie können ihn mit einer einfachen if
schreiben.
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";
}
Die logischen Operatoren &&
, ||
und !
geben immer true
oder false
zurück, sodass die möglichen Schalterfälle nur wahr und falsch sind. Sie sollten nur mit Zeichenketten oder Zahlenfällen gehen.