2016-07-24 205 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爲假,應返回一個字符串。
所以當你使用這種模式時,一定要確保表達式的右邊的表達式解析爲布爾值。