Синтаксис языка для Switch (Javascript и C #) и Select ... Case (VBScript) - Объединение случаев - PullRequest
3 голосов
/ 15 декабря 2010

В VB, если бы я хотел объединить описание дела, оно выглядело бы так:

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 в firebug, он определит часы как false.Ясно, что код оценивает, но что он оценивает.

Ответы [ 3 ]

5 голосов
/ 15 декабря 2010

Оператор запятой Javascript оценивает оба своих операнда в порядке слева направо, возвращая самый правый.Итак, вы по существу написали

switch (someValue) {
    case 3:
        break;
}
3 голосов
/ 15 декабря 2010

Вы также можете использовать:

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

Просто для удовольствия : чтобы можно было сравнить число с несколькими значениями, может пригодиться расширение номера:

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 - глава по switch

2 голосов
/ 15 декабря 2010

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>

.. пишет первый случай только тогда, когда x == 7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...