一个 switch 语句中的多个表达式
multiple expressions in one switch statement
这是我第一次在Javascript中使用switch
语句。有没有一种方法可以在一个 switch 语句中评估多个条件,如下所示:
var i = 1;
switch(i && random(1)<0.3) {
case (1):
//code block
break;
case (2):
//code block
}
如果两个条件都为真,代码块将执行?
您可以这样做,但 switch 语句将切换您提供的表达式的结果。
假设您的表达式中有一个逻辑 and (&&
),则根据 &&
的工作原理定义了两种可能的结果。
- 如果左侧表达式的计算结果为真,则表达式将等于第二部分的计算结果。
- 如果左侧表达式的计算结果为 false,则整个表达式的计算结果将为 false。
您可以在 Ecmascript spec
上阅读有关 switch 语句的更多信息
你可以做这样的事情:
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 (true) {
case a && b:
// do smth
break;
case a && !b:
// do other thing
break;
}
您唯一需要记住的是 && 不仅可以 return 布尔值,还可以是任何其他值,例如'a'(在上面的代码片段中)解析为某个错误值。如果 'b' 是字符串 - 那么 a && b,其中 a 为假,应 return 一个字符串。
因此,当您使用此模式时,请始终确保 && 表达式的右侧解析为布尔值。
这是我第一次在Javascript中使用switch
语句。有没有一种方法可以在一个 switch 语句中评估多个条件,如下所示:
var i = 1;
switch(i && random(1)<0.3) {
case (1):
//code block
break;
case (2):
//code block
}
如果两个条件都为真,代码块将执行?
您可以这样做,但 switch 语句将切换您提供的表达式的结果。
假设您的表达式中有一个逻辑 and (&&
),则根据 &&
的工作原理定义了两种可能的结果。
- 如果左侧表达式的计算结果为真,则表达式将等于第二部分的计算结果。
- 如果左侧表达式的计算结果为 false,则整个表达式的计算结果将为 false。
您可以在 Ecmascript spec
上阅读有关 switch 语句的更多信息你可以做这样的事情:
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 (true) {
case a && b:
// do smth
break;
case a && !b:
// do other thing
break;
}
您唯一需要记住的是 && 不仅可以 return 布尔值,还可以是任何其他值,例如'a'(在上面的代码片段中)解析为某个错误值。如果 'b' 是字符串 - 那么 a && b,其中 a 为假,应 return 一个字符串。
因此,当您使用此模式时,请始终确保 && 表达式的右侧解析为布尔值。