2016-07-24 211 views
0

这是我第一次在Javascript中使用switch语句。有没有一种方法来评估多个条件之一switch语句,像这样:在一个switch语句中的多个表达式

var i = 1; 
switch(i && random(1)<0.3) { 
    case (1): 
     //code block 
     break; 
    case (2): 
     //code block 
} 

所以,如果条件都是真实的代码块将执行?

+1

*这样,如果两个条件都为真,代码块就会执行*:两者都是?什么时候应该只有第一个被执行,什么时候只有第二个,什么时候没有? – trincot

+0

您可能想使用'+'而不是'&&' – Bergi

回答

0

可以做这样的事情:

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 
} 
0

你可以这样做,但switch语句会打开你提供的表达式的结果。

由于在表达式中有逻辑和(&&),因此&&的工作方式定义了两种可能的结果。

  1. 如果左手表达式的计算结果为真,表达式将等于第二部分的计算结果。
  2. 如果左手表达式的计算结果为false,则整个表达式将评估为false。

你可以阅读更多关于switch语句的Ecmascript spec

+0

实际上'&&'可以评估为非布尔结果,但是是的,这是真的,目前的脚本将永远不会匹配任何情况 – Bergi

+0

@Bergi感谢提醒。更新回答 – eltonkamami

+0

我想我必须说'case(5 && true)' – Roman

0

这是可能的写switch语句是这样的:

switch (true) { 
    case a && b: 
    // do smth 
    break; 
    case a && !b: 
    // do other thing 
    break; 
} 

你需要记住的唯一的事情就是& &不仅可以返回布尔值,而且可以返回任何其他值,例如'a'(在上面的代码片段中)解决了一些错误的值。如果'b'是字符串 - 那么一个& & b,其中a为假,应返回一个字符串。
所以当你使用这种模式时,一定要确保表达式的右边的表达式解析为布尔值。