Javascript 带范围值的Switch语句

Javascript 带范围值的Switch语句,javascript,switch-statement,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;

我正在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);
var百分比=20;
可变宽度字节;
开关(百分比)
{
案例0:
宽度字节=0;
打破
情况(百分比>10和百分比<20):
宽度字节=16;
打破
情况(百分比>=20和百分比<30):
宽度字节=30;
打破
违约:
宽度字节=0;
打破
}
平均宽度(widthbytes);

它总是返回默认值,而不是30。我的代码有问题吗?

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

请注意,为了得到一个更干净的实现,我将您原来的case 0:吸收到默认值中,因为它们都做相同的事情。如果不需要这样做,则需要更改getRange函数,使其不再返回与0到10之间的任何数字相同的0范围。

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

case (percent > 10 && percent < 20):
案例(百分比>10&¢er<20):

返回与变量值不可比的布尔值。使用if-else完成任务。

只需在代码中稍作更改即可。 您的代码中有开关(百分比)**,仅更改此***开关(真)*

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


例如,案例10:返回一个值;对还是错。

我看不出@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);
var百分比=10//测试值->10,11,19,20,21,29,30
可变宽度字节;
开关(真){
//案例0:
//宽度字节=0;
//中断;
情况(百分比>10和百分比<20):
宽度字节=16;
打破
情况(百分比>=20和百分比<30):
宽度字节=30;
打破
违约:
宽度字节=0;
打破
}
console.log(宽度字节);

这是行不通的。用一个简单的if-else表达式代替。你不能这样写。使用
if
/
else
或a,尽管我不推荐后者。
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);