我在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.我的代码有什么问题吗?
答案 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之间的任何数字。