切换语句的范围值

时间:2014-02-26 11:34:58

标签: javascript switch-statement

我在JS文件中编写了swtich javascript switch语句,并且发现问题整天仍然无法找到解决方案。

这是我用jQuery编写的javascript文件:

var percent = 20;
var widthbytes;
switch(percent)
{
case 0:
   widthbytes=0;
   break;
    case (percent > 10 && percent < 20):
   widthbytes=16;
   break;
    case (percent >=20 && percent < 30):
       widthbytes=30;
       break;
default:
       widthbytes=0;
       break;
}
average.width(widthbytes);

它始终返回默认值而不是30.我的代码有什么问题吗?

4 个答案:

答案 0 :(得分:0)

switch语句只检查变量的值,然后根据该值给出结果,使表达式

case (percent > 10 && percent < 20):

返回与变量值无法比较的布尔值。使用if-else来完成工作。

答案 1 :(得分:0)

只需对代码进行一些更改即可。  您的代码中有切换(百分比)**,只更改此***开关(true)*

原因是因为switch语句返回一个布尔值,这就是为什么我们需要它们具有相同的比较,即boolean vrs boolean。

例如 案例10: 会返回一个值;是真还是假。

答案 2 :(得分:0)

我无法看到@Carlos Marin的答案出现问题。这有效: -

var percent = 10; //test values-> 10, 11, 19, 20, 21, 29, 30
var widthbytes;

switch(true){
// case 0:
//    widthbytes=0;
//    break;
case (percent > 10 && percent < 20):
   widthbytes=16;
   break;
case (percent >=20 && percent < 30):
   widthbytes=30;
   break;
default:
   widthbytes=0;
   break;
}

console.log(widthbytes);

答案 3 :(得分:-1)

switch语句不能那样工作。你的第二个案例是这样检查的:if (percent == (percent > 10 && percent < 20)) ...,它不会产生预期的结果。

您可以使用if / elseif / else结构:

if (percent === 0) {
  widthbytes = 0;
} else if (percent > 10 && percent < 20 {
  widthbytes = 16;
} else if (percent >= 20 && percent < 30 {
  widthbytes = 30;
} else {
  widthbytes = 0;
}

或者您可以使用将范围转换为常量的函数:

function getRange(percent) {
  return Math.floor(percent/10);
}

switch(getRange(percent)) {
  case 10:
    widthbytes = 16;
    break;
  case 20:
    widthbytes = 30;
    break;
  default: 
    widthbytes = 0;  
}

请注意,为了获得更清晰的实现,我将原始案例0:同化为默认值,因为它们都做同样的事情。如果这不合适,则需要将getRange函数更改为不再返回0的相同范围,而不是0到10之间的任何数字。