2010-12-15 79 views
3

在VB中,如果我想的情況下,結合statment它看起來像這樣用於開關(Javascript和C#),並選擇語言語法...案例(VBScript)的 - 併案

Select (somevalue) 
    Case 1, 2, 3: 
    Do Something 
End Select 

在C#和Javascript

switch (someValue) { 
    case 1: 
    case 2: 
    case 3: 
    //dosomething 
    break; 
} 

但是這個運行沒有錯誤,在Javascript

switch (someValue) { 
    case 1, 2, 3: 
    break; 
} 

但沒有做什麼期待編輯。它究竟在做什麼?

我問的原因是因爲如果我將鼠標懸停在螢火蟲的1,2或3上,它會將手錶指定爲假。很明顯,代碼正在評估,但評估的是什麼。

+2

'1,2,3'是計算表達式到'3'。 – Gabe 2010-12-15 19:42:41

回答

5

The Javascript comma operator按從左到右的順序評估其操作數,返回最右邊的。所以,你基本上是寫

switch (someValue) { 
    case 3: 
     break; 
} 
+0

你應該期望case 1 || 2 || 3工作,碰巧知道爲什麼它不是? – KooiInc 2010-12-15 20:01:29

+0

@Kooilnc它不是一回事,「1 || 2 || 3」的第一個操作數(1)的計算結果爲「true-ish」,這就是返回的結果。 – mdarwi 2010-12-15 21:44:40

2

MDarwi打我吧,不過他釘它,

<script type="text/javascript"> 
var x = 5; 
switch (x) 
{ 
    case 5, 6, 7: 
    document.write("<b>This should work on 5, 6 or 7.</b>"); 
    break; 
    case 0: 
    document.write("<b>This should work on 0.</b>"); 
    break; 
} 
</script> 

..writes第一情況下,只有當x == 7

3

你也可以使用方法:

switch(true) { 
    case (somevalue <= 3): /* action if <= 3 */ break; 
    case (somevalue <= 6): /* action if <= 6 */ break; 
    //[etc] 
    default: 'no action' 
} 

只是爲了好玩:要能比較的對多個值棕土一個Number延伸可以派上用場:

Number.prototype.In = function(){ 
    var i = -1, args = arguments; 
    while (++i<args.length){ 
     //use float for all numbers 
     if (parseFloat(this) === parseFloat(args[i])){ 
     return true; 
     } 
    } 
    return false; 
}; 

然後交換機變爲:

switch(true) { 
    case somevalue.In(1,2,3): /* action if 1,2,3 */ break; 
    case somevalue.In(6,10,14): /* action if 6,10,14 */ break; 
    //[etc] 
    default: 'no action' 
} 

參見O'Reilly - chapter on switch

+0

+1;這是一個遺憾,因此不允許爲答案添加書籤。 – 2010-12-15 20:41:26

+0

謝謝。我認爲http://stackoverflow.com/questions/4454076/language-syntax-for-switch-javascript-and-c-and-select-case-vbscript-com/4454417#4454417是這個答案的書籤。 – KooiInc 2010-12-15 21:04:27