Switchステートメントを記述しようとしていますが、私が望むようには動作しないようです。
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);
}
アラートは2と1を返しますが、戻り値は(1 && 1)のものです。なぜそうですか?どうすれば修正できますか?
そのような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);
}
したがって、もちろん下の2つのケースは実行されません。 if
およびelse if
ステートメントを使用するか、必要に応じて入れ子になったスイッチを使用することをお勧めします。
次のようなこともできます:
switch (exerciseId + " " + intensity_level) {
case("1 1"): ...
case("1 2"): ...
case("2 1"): ...
case("2 2"): ...
switch
ステートメントの評価方法ではありません。シナリオでは、常に論理値の2番目の整数に評価され、&&
。
( 論理演算子 )に関する詳細情報
論理AND(&&)
expr1 && expr2
Falseに変換できる場合、expr1を返します。それ以外の場合、expr2を返します。したがって、ブール値で使用すると、&&は両方のオペランドがtrueの場合に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";
}
論理演算子&&
、||
および!
は常にtrue
またはfalse
を返すため、考えられるスイッチケースはtrueとfalseのみです。文字列または数字のケースのみを使用する必要があります。