Подтвердить что ты не робот

Оператор условного переключения Javascript

Есть ли способ написать условный оператор switch в javascript?

Я предполагаю, что нет, так как следующее значение всегда имеет значение по умолчанию:

    var raw_value = 11.0;
    switch(raw_value)
    {
        case (raw_value > 10.0):
          height = 48;
          width = 36;
          break;
        case (raw_value > 5.0):
          height = 40;
          width = 30;
          break;
        default:
          height = 16;
          width = 12;
          break;
    }

Если нет, что я должен использовать вместо этого - инструкция long if/else?

спасибо:)

4b9b3361

Ответ 1

В выражении switch оцениваемое значение выражения switch сравнивается с оцененными значениями случаев. Таким образом, значение raw_value (число) сравнивается с raw_value > 10.0 (выражение сравнения) и raw_value > 5.0 (выражение сравнения).

Итак, если одно из выражений case не дает числа, равного 11.0, или вы используете выражение switch true, вы всегда получите случай по умолчанию.

Просто используйте простой if/else вместо:

var raw_value = 11.0;
if (raw_value > 10.0) {
    height = 48;
    width = 36;
} else if (raw_value > 5.0) {
    height = 40;
    width = 30;
} else {
    height = 16;
    width = 12;
}

Ответ 2

Вот так:

var raw_value = 11.0;
switch(true) {
    case (raw_value > 10.0):
      height = 48;
      width = 36;
      break;
    case (raw_value > 5.0):
      height = 40;
      width = 30;
      break;
    default:
      height = 16;
      width = 12;
}

Выражения в операторах case будут оцениваться как true или false, и если это соответствует условию switch... voilà. default действует как else.

Бонус: вы можете инвертировать всю логику, просто заменив true на false. С помощью операторов if ... else if вам нужно будет редактировать каждое предложение if в отдельности.

Ответ 3

Нет, оператор switch не работает так. Однако это утверждение не всегда проще. Например, версия switch имеет 15 строк:

var raw_value = 11.0;
switch(raw_value) {
    case (raw_value > 10.0):
      height = 48;
      width = 36;
      break;
    case (raw_value > 5.0):
      height = 40;
      width = 30;
      break;
    default:
      height = 16;
      width = 12;
      break;
}

и только "длинная" if/else версия 11:

var raw_value = 11.0;
if (raw_value > 10.0) {
      height = 48;
      width = 36;
} else if (raw_value > 5.0) {
      height = 40;
      width = 30;
} else {
      height = 16;
      width = 12;
}

Итак, в вашем случае лучше использовать второй, чем первый...

Ответ 4

Не пытайтесь делать это дома или относитесь к этому серьезно, это просто для удовольствия...

function conditionalSwitch( value, cond, callback /* cond, callback, cond, callback, ... */ ) 
{
  for (var i = 1; i < arguments.length; i += 2) {
    if ( arguments[i](value) ) {
      arguments[i+1](value);
      return;
    }
  }
}

var width, height;

conditionalSwitch( 5.1,

  function(val) { return val > 10 },
  function () {
    height = 48;
    width = 36
  },

  function(val) { return val > 5 },
  function () {
    height = 40;
    width = 30
  },

  //Default

  function(val) { return true },
  function () {
    height = 16;
    width = 12;
  }
)

console.log(width, height);