2017-08-31 61 views
-2

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

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代替

+1

有什么所谓,如果条件是什么?它看起来像nIMCDecimal是一个数值,然后它是如何可以像字符串“Bajo比索”?你的switch语句似乎是错误的。 –

+0

ifs在交换机中的用途是什么? – epascarello

+0

我认为它需要他们来评估数字范围内给予它? – IsaacG

回答

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 
0

Mozilla documentation状态:

switch语句首先评估其表达。

然后它看起来针对其表达的计算结果为相同的值作为输入表达式的结果(使用严格比较,===)和将控制转移到该条款中,执行相关联的语句第一壳体子句。

如果没有找到匹配的情况下,条款(如果有多个的情况下匹配所提供的值,被选择,即使该情况下不彼此相等匹配的第一个情况)

,该程序查找可选的默认子句,如果找到,则将控制转移到该子句,执行相关的语句。

如果没有发现违约条款,该方案在开关结束后的声明中继续执行。按照惯例,默认的子句是最后一个子句,但并不一定如此。

+1

哇,需要一些返回语句.... – epascarello

0

相反switch语句,你应该使用if/else if如下所示:

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

等。希望这会有所帮助。