我有以下问题:无论我尝试什么,我的函数总是返回默认值。当我使用if / else语句时,一切正常。失败在哪里?
function auswertung(stueckzahl) {
var preis1 = 0.77;
var preis2 = 0.76;
var preis3 = 0.73;
var preis4 = 0.69;
var preis5 = 0.67;
switch(stueckzahl) {
case ((stueckzahl>=500) && (stueckzahl <= 1000)): {
return preis1;
}
case ((stueckzahl >= 1001) && (stueckzahl <= 2500)): {
return preis2;
}
case ((stueckzahl >= 2501) && (stueckzahl <= 5000)): {
return preis3;
}
case ((stueckzahl >= 5001) && (stueckzahl <= 10000)): {
return preis4;
}
case ((stueckzahl >= 10001) && (stueckzahl <= 30000)): {
return preis5;
}
default: {
return preis1;
}
}
}
document.write (auswertung(10000));
&#13;
答案 0 :(得分:3)
您可以完美地使用switch布尔true
作为expression来逐个重新评估您的案例。
这样你的代码保持干净:
function auswertung(stueckzahl) {
var preis1 = 0.77,
preis2 = 0.76,
preis3 = 0.73,
preis4 = 0.69,
preis5 = 0.67;
switch (true) {
case stueckzahl >= 500 && stueckzahl <= 1000:
return preis1;
case stueckzahl >= 1001 && (stueckzahl <= 2500):
return preis2;
case stueckzahl >= 2501 && stueckzahl <= 5000:
return preis3;
case stueckzahl >= 5001 && stueckzahl <= 10000:
return preis4;
case stueckzahl >= 10001 && stueckzahl <= 30000:
return preis5;
default:
return preis1;
}
}
console.log('500:', auswertung(500));
console.log('10000:', auswertung(10000));
console.log('30000:', auswertung(30000));
&#13;
答案 1 :(得分:1)
如果要将表达式传递给case
语句,则首先对其进行评估。
根据spec
让exprRef成为评估Expression的结果。
- 醇>
让switchValue为GetValue(exprRef)。
所以,
(stueckzahl>=500) && (stueckzahl <= 1000)
将是true
或false
。
这意味着,除非stueckzahl
为true/false
,否则它将始终转到default
部分。
您需要将此switch
语句替换为if/else
。 (也只是检查每种情况下的上限)
if ( stueckzahl <= 1000) {
return preis1;
}
if ( stueckzahl <= 2500 ) {
return preis2;
}
if ( stueckzahl <= 5000 ) {
return preis3;
}
if ( stueckzahl <= 10000 ) {
return preis4;
}
if ( stueckzahl <= 30000 ) {
return preis5;
}
else {
return preis1;
}
答案 2 :(得分:0)
你的开关期望“stueckzahl”是一个值,而不是“true”或“false”,这就是“(stueckzahl&gt; = 500)&amp;&amp;(stueckzahl&lt; = 1000)”返回。
你必须使用“if / else”语句才能达到你想要的效果
答案 3 :(得分:0)
您需要在每个break;
声明后添加case
。
<强> e.g。强>
switch (true) {
case ((stueckzahl >= 500) && (stueckzahl <= 1000)): return preis1; break;
case ((stueckzahl >= 1001) && (stueckzahl <= 2500)): return preis2; break;
[...]
}
否则,脚本将继续检查下一个case
。
如果没有break;
,脚本将始终通过运行default case
完成。
答案 4 :(得分:0)
开关的工作方式如下:
将切换表达式与不同的大小写值进行比较。如果该比较评估为真,则执行案例下的代码。
您的切换表达式为stueckzahl
其中一个案例表达式值为:((stueckzahl>=500) && (stueckzahl <= 1000))
,根据stueckzahl的值,它将评估为true或false。
所以最后您将要比较的是:stueckzahl == true
或stueckzahl == false
如果您将数字作为函数的参数传递,则永远不会为真。
在你的情况下看起来你想要的是一串ifs:
if ((stueckzahl>=500) && (stueckzahl <= 1000)) {
return preis1;
}
if ((stueckzahl >= 1001) && (stueckzahl <= 2500)) {
return preis2;
}
if ((stueckzahl >= 2501) && (stueckzahl <= 5000)) {
return preis3;
}
if ((stueckzahl >= 5001) && (stueckzahl <= 10000)) {
return preis4;
}
if ((stueckzahl >= 10001) && (stueckzahl <= 30000)) {
return preis5;
}
return preis1;