2010-12-15 46 views
3

En VB si je voulais combiner un cas statment il ressemblerait à cecisyntaxe de la langue pour Switch (Javascript et C#) et sélectionnez ... Cas (VBScript) - Combinant cas

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

en C# et Javascript

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

Cependant, cela fonctionne sans erreurs Javascript

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

Mais ne fait pas le attendre éd. Que fait-il réellement?

La raison pour laquelle je demande est parce que si je survole le 1, 2, ou 3 dans firebug il spécifie la montre comme faux. Il est clair que le code est en train d'évaluer mais qu'est-ce qu'il évalue.

+2

'1, 2 3', est une expression qui à '3'. – Gabe

Répondre

5

The Javascript comma operator évalue ses deux opérandes dans l'ordre de gauche à droite, en retournant le plus à droite. Donc, vous essentiellement écrit

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

vous devez vous attendre à ce que le cas 1 || 2 || 3 fonctionne, il arrive de savoir pourquoi ce n'est pas? – KooiInc

+0

@Kooilnc Ce n'est pas la même chose, avec "1 || 2 || 3" le premier opérande (le 1) évalue à "true-ish", et c'est ce qui est retourné. – mdarwi

2

MDarwi m'a battu à lui, néanmoins il le cloue,

<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 le premier cas que lorsque x == 7.

3

Vous pouvez également utiliser:

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

Juste pour le plaisir: pouvoir comparer une umber contre plusieurs valeurs d'une extension de numéro peut être utile:

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

puis votre commutateur devient:

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

Voir aussi O'Reilly - chapter on switch

+0

+1; il est dommage que SO ne permet pas de bookmarking une réponse. –

+0

Merci. Je pense que http://stackoverflow.com/questions/4454076/language-syntax-for-switch-javascript-and-c-and-select-case-vbscript-com/4454417#4454417 est un signet de cette réponse. – KooiInc