admin管理员组文章数量:1173665
I am trying to write a switch statement but it doesn't seem to work how I want.
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);
}
The alerts gives 2 and 1 but the returned value is for (1 && 1). Why is it so? How can I fix this?
I am trying to write a switch statement but it doesn't seem to work how I want.
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);
}
The alerts gives 2 and 1 but the returned value is for (1 && 1). Why is it so? How can I fix this?
Share Improve this question edited Mar 6, 2017 at 19:40 Charles Clayton 17.9k13 gold badges93 silver badges122 bronze badges asked Mar 5, 2017 at 18:21 ThinkerThinker 5,34615 gold badges68 silver badges142 bronze badges4 Answers
Reset to default 25You just can't use a switch
like that. (1 && 1) == (2 && 1) == 1
and (1 && 2) == (2 && 2) == 2
, so you're doing the equivalent of:
switch (exerciseId && intensity_level) {
case (1): //...
case (2): //...
case (1): // same as above
case (2): // same as above
default:
//...
}
So of course the lower two cases will never execute. You're better of just using if
and else if
statements, or maybe nested switches if you want.
You could also do something like:
switch (exerciseId + " " + intensity_level) {
case("1 1"): ...
case("1 2"): ...
case("2 1"): ...
case("2 2"): ...
That isn't how a switch
statement will evaluate. For your scenario it will always evaluate to the 2nd integer in the logical and &&
.
(More information about Logical Operators)
Logical AND (&&)
expr1 && expr2
Returns expr1 if it can be converted to false; otherwise, returns expr2. Thus, when used with Boolean values, && returns true if both operands are true; otherwise, returns false.
You actually don't even need to use a switch, you can write it with a simple 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";
}
You can use switch(true)
then now you can use logical operator on case
.
switch (true)
{
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;
}
The logical operators &&
, ||
and !
always return true
or false
so the possible switch cases are only true and false. You should go with strings or numbers cases only.
本文标签: javascriptTypescript switch case with logical andStack Overflow
版权声明:本文标题:javascript - Typescript switch case with logical and - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1737622799a1999243.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论