Условия внутри конструкции switch

Рейтинг: 1Ответов: 1Опубликовано: 14.01.2015

Доброго времени суток!

Подскажите, в чем может быть проблема? Прочитал, что внутри switch можно поставить дополнительные условия и упростить\укоротить код, но что-то он отказывается выполнять условия и просто выдает то, что прописано в блоке default.

Собственно, простой код:

var dateInt = parseInt(getDaysLeft(dataUser[2]),10);
var result = "Unknown";

   switch(dateInt){

    case -2:
      result = "Yesterday";
    break;

    case -1:
      result = "To day";
    break;

    case dateInt>0 && dateInt<=8:
      result = getTextDay(dataUser[2]);
    break;

    default:
      result = "Default";
    break;

   }

На выходе выводит "Default", несмотря на то, что значения для условия совпадают.

Функция getDaysLeft выдает разницу между двумя датами в числовом эквиваленте.

Ответы

▲ 3Принят

Вы, конечно, можете использовать не только статические значения в case, то не стоит забывать, что сравнение все равно идет как dateInt === value. Можно использовать, конечно, небольшой трюк, чтобы все работало примерно по задуманному:

var dateInt = parseInt(getDaysLeft(dataUser[2]),10);
var result = "Unknown";

switch(dateInt){
    case -2:
      result = "Yesterday";
    break;

    case -1:
      result = "To day";
    break;

    case dateInt>0 && dateInt<=8 ? dateInt : true:
      result = getTextDay(dataUser[2]);
    break;

    default:
      result = "Default";
    break;

}
console.log(result)

P.S. Хочу заметить, что с точки зрения оформления кода это выглядит ужасно, может порождать ошибки и не приветствуется. Вы либо используете статические значения в case, либо используете if для условий.