Javascript条件切换语句

时间:2010-11-02 21:21:50

标签: javascript

有没有办法在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;
    }

如果没有,我应该使用什么 - 长if / else语句?

谢谢:)

4 个答案:

答案 0 :(得分:117)

像这样:

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语句中的表达式将评估为truefalse,如果匹配switch条件......瞧。 default的行为类似于else

奖励:您只需将true替换为false即可反转整个逻辑。使用if ... else if语句,您必须单独编辑每个if子句。

答案 1 :(得分:28)

switch statement中,switch表达式的评估值与案例的评估值进行比较。所以这里将raw_value(数字)的值与raw_value > 10.0(比较表达式)和raw_value > 5.0(比较表达式)进行比较。

因此,除非您的一个案例表达式产生的数字等于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 :(得分:2)

不要在家里尝试这个,或者把它当回事,这只是为了带来乐趣......

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



function test(val) {
  let width, height;

  conditionalSwitch(val,
  
    (val) => val > 10,
    () => [height, width] = [48,36],

    (val) => val > 5,
    () => [height, width] = [40, 30],

    // Default
    () => true,
    () => [height, width] = [16, 12]
  )
  console.log(width, height);
}


test(4.9);  // 12 16
test(5.1);  // 30 40
test(10.1); // 36 48

答案 3 :(得分:1)

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

所以在你的情况下,最好使用第二个而不是第一个......