這是我第一次在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