switch / case总是返回默认值

时间:2016-07-26 10:33:34

标签: javascript

我有以下问题:无论我尝试什么,我的函数总是返回默认值。当我使用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;
&#13;
&#13;

5 个答案:

答案 0 :(得分:3)

您可以完美地使用switch布尔true作为expression来逐个重新评估您的案例。

这样你的代码保持干净:

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

如果要将表达式传递给case语句,则首先对其进行评估。

根据spec

  
      
  1. 让exprRef成为评估Expression的结果。

  2.   
  3. 让switchValue为GetValue(exprRef)。

  4.   

所以,

(stueckzahl>=500) && (stueckzahl <= 1000)

将是truefalse

这意味着,除非stueckzahltrue/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 == truestueckzahl == 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;

更多详情请见:http://www.w3schools.com/js/js_switch.asp