开关盒如何工作?

时间:2017-08-31 03:30:00

标签: javascript switch-statement

我有一个开关盒,尽管满足了适当的条件但没有注册任何东西。它们究竟是如何工作的?这是代码

sClasificacionIMC = ''
    switch(nIMCDecimal){
        case 'Bajo peso':
            if(nIMCDecimal <18.50){
                sClasificacionIMC = 'Bajo peso'
            }
        break;
            case 'Delgadez severa':
                if(nIMCDecimal <16.00){
                    sClasificacionIMC = 'Delgadez severa'
            }
        break;
            case 'Delgadez moderada':
                if(nIMCDecimal > 16.00 && nIMCDecimal < 16.99){
                    sClasificacionIMC = 'Delgadez moderada'
                }
        break;
            case 'Delgadez leve':
                if(nIMCDecimal > 17.00 && nIMCDecimal < 18.49 ){
                    sClasificacionIMC = 'Delgadez leve'
                }
        break;
            case 'Normal':
                if(nIMCDecimal > 18.5 && nIMCDecimal < 24.99){
                    sClasificacionIMC = 'Normal'
                }
        break;
            case 'Sobrepeso':
                if(nIMCDecimal >= 25.00){
                    sClasificacionIMC = 'Sobrepeso'
                }
        break; 
            case'Preobeso':
                if(nIMCDecimal > 25.00 && nIMCDecimal < 29.99){
                    sClasificacionIMC = 'Preobeso'
                }
        break;
            case 'Obesidad':
                if(nIMCDecimal >= 30.00){
                    sClasificacionIMC = 'Obesidad'
                }
        break;
            case 'Obesidad leve':
                if(nIMCDecimal > 30.00 && nIMCDecimal < 34.99){
                    sClasificacionIMC = 'Obesidad leve'
                }
        break;
            case 'Obesidad media':
                if(nIMCDecimal > 35.00 && nIMCDecimal < 39.99){
                    sClasificacionIMC = 'Obesidad media'
                }
        break;
            case 'Obesidad morbida':
                if(nIMCDecimal >= 40.00){
                    sClasificacionIMC = 'Obesidad mórbida'
                }
        }

结果(sClasificacionIMC)设置为注册到一个数组中,但是一旦注册,它只显示一个空字段,尽管符合条件,但它不适用于任何情况。

也没有控制台错误。

我很困惑我是否应该在开关上使用nIMCDecimal(nIMCDecimal)或者我是否应该使用sClasificacionIMC

3 个答案:

答案 0 :(得分:0)

Mozilla documentation州:

  

switch语句首先计算其表达式。

     

然后查找第一个case子句,其表达式的计算结果与输入表达式的结果相同(使用严格比较,===),并将控制转移到该子句,执行相关的语句。

     

(如果多个案例与提供的值匹配,则选择匹配的第一个案例,即使案例彼此不相等。)

     

如果找不到匹配的case子句,程序将查找可选的default子句,如果找到,则将控制转移到该子句,执行相关的语句。

     

如果未找到default子句,程序将在切换结束后的语句处继续执行。按照惯例,default子句是最后一个子句,但不一定是这样。

答案 1 :(得分:0)

您应使用如下所示的switch代替if/else if语句:

sClasificacionIMC = ''
if(nIMCDecimal <18.50){sClasificacionIMC = 'Bajo peso'}
else if(nIMCDecimal <16.00){ sClasificacionIMC = 'Delgadez severa'}

等等。希望这会有所帮助。

答案 2 :(得分:0)

关闭!在这种情况下(以及其他类似的情况),尽量不要使用switch语句。在这里使用if else更容易 。这是你的代码使用这些!

const f = function(nIMCDecimal){
sClasificacionIMC = ''

  if(nIMCDecimal<18.50){
      sClasificacionIMC = 'Bajo peso'
  }else if(nIMCDecimal <16.00){
      sClasificacionIMC = 'Delgadez severa'

  }else if(nIMCDecimal > 16.00 && nIMCDecimal < 16.99){
      sClasificacionIMC = 'Delgadez moderada'

  }else if(nIMCDecimal > 17.00 && nIMCDecimal < 18.49){
      sClasificacionIMC = 'Delgadez leve'

  }else if(nIMCDecimal > 18.5 && nIMCDecimal < 24.99){
      sClasificacionIMC = 'Normal'

  }else if (nIMCDecimal >= 25.00){
      sClasificacionIMC = 'Sobrepeso'

  }else if(nIMCDecimal > 25.00 && nIMCDecimal < 29.99){
      sClasificacionIMC = 'Preobeso'

  }else if (nIMCDecimal >= 30.00){
      sClasificacionIMC = 'Obesidad'

  }else if (nIMCDecimal > 30.00 && nIMCDecimal < 34.99){
      sClasificacionIMC = 'Obesidad leve'

  }else if(nIMCDecimal > 35.00 && nIMCDecimal < 39.99){
      sClasificacionIMC = 'Obesidad media'

  }else if (nIMCDecimal >= 40.00){
      sClasificacionIMC = 'Obesidad mórbida'
  }
  return sClasificacionIMC 
}
console.log(f(2)) //Bajo peso