这是我第一次在Javascript中使用switch
语句。有没有一种方法来评估多个条件之一switch语句,像这样:在一个switch语句中的多个表达式
var i = 1;
switch(i && random(1)<0.3) {
case (1):
//code block
break;
case (2):
//code block
}
所以,如果条件都是真实的代码块将执行?
这是我第一次在Javascript中使用switch
语句。有没有一种方法来评估多个条件之一switch语句,像这样:在一个switch语句中的多个表达式
var i = 1;
switch(i && random(1)<0.3) {
case (1):
//code block
break;
case (2):
//code block
}
所以,如果条件都是真实的代码块将执行?
您可以做这样的事情:
var i = 1;
switch((i==1) + (Math.random(1)<0.3)*2) {
case 0:
//code block when neither is true
break;
case 1:
//code block when only i == 1
break;
case 2:
//code block when only random(1)<0.3
break;
case 3:
//code block when both i==1 and random(1)<0.3
break;
}
...但它不是真正的最好的代码,当其中一个测试表达式不是0或1(错误或真实)时,很容易导致错误。
这是更好地使用if ... else
结构来处理这个:
var i = 1;
var small = Math.random(1)<0.3;
if (i==1) {
if (small) {
//code block when both i==1 and random(1)<0.3
} else {
//code block when only i == 1
}
} else if (small) {
//code block when only random(1)<0.3
} else {
//code block when neither is true
}
你可以这样做,但switch语句会打开你提供的表达式的结果。
由于在表达式中有逻辑和(&&
),因此&&
的工作方式定义了两种可能的结果。
你可以阅读更多关于switch语句的Ecmascript spec
实际上'&&'可以评估为非布尔结果,但是是的,这是真的,目前的脚本将永远不会匹配任何情况 – Bergi
@Bergi感谢提醒。更新回答 – eltonkamami
我想我必须说'case(5 && true)' – Roman
这是可能的写switch语句是这样的:
switch (true) {
case a && b:
// do smth
break;
case a && !b:
// do other thing
break;
}
你需要记住的唯一的事情就是& &不仅可以返回布尔值,而且可以返回任何其他值,例如'a'(在上面的代码片段中)解决了一些错误的值。如果'b'是字符串 - 那么一个& & b,其中a为假,应返回一个字符串。
所以当你使用这种模式时,一定要确保表达式的右边的表达式解析为布尔值。
*这样,如果两个条件都为真,代码块就会执行*:两者都是?什么时候应该只有第一个被执行,什么时候只有第二个,什么时候没有? – trincot
您可能想使用'+'而不是'&&' – Bergi