switch/case总是返回默认值
switch/case always returns default value
我有以下问题:无论我尝试什么,我的函数总是返回默认值。当我使用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));
您可以完美地使用带有布尔true
作为表达式的开关来逐个重新评估您的案例。
这样你的代码保持干净:
function auswertung(stueckzahl) {
switch (true) {
case stueckzahl >= 10001 && stueckzahl <= 30000:
return 0.67;
case stueckzahl >= 5001 && stueckzahl <= 10000:
return 0.69;
case stueckzahl >= 2501 && stueckzahl <= 5000:
return 0.73;
case stueckzahl >= 1001 && stueckzahl <= 2500:
return 0.76;
case stueckzahl >= 500 && stueckzahl <= 1000:
default:
return 0.77;
}
}
console.log('500:', auswertung(500));
console.log('10000:', auswertung(10000));
console.log('30000:', auswertung(30000));
如果将表达式传递给case
语句,则首先对其求值。
根据规范
设exprRef是对表达式求值的结果。
让switchValue为GetValue(exprRef)。
所以,
(stueckzahl>=500) && (stueckzahl <= 1000)
将是CCD_ 3或CCD_。
这意味着除非stueckzahl
是true/false
,否则它将始终转到default
部分。
您需要通过doing将此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;
}
您需要在每个case
语句之后包含break;
。
例如
switch (true) {
case ((stueckzahl >= 500) && (stueckzahl <= 1000)): return preis1; break;
case ((stueckzahl >= 1001) && (stueckzahl <= 2500)): return preis2; break;
[...]
}
否则,脚本将继续检查下一个case
。
如果没有break;
,脚本将始终通过运行default case
来完成。
您的开关希望"stueckzahl"是一个值,而不是"true"或"false",这就是"(stueckzahl>=500)&&(stueckzahl<=1000)"返回的值。
您必须使用"if/else"语句才能实现您想要的目标
开关的工作方式如下。
将开关表达式和不同的大小写值进行比较。如果比较结果为true,则执行案例下的代码。
您的交换机表达式是stueckzahl
其中一个case表达式值为:((stueckzahl>=500) && (stueckzahl <= 1000))
,它将根据stueckzahl的值计算为true或false。
所以最后你要比较的是:stueckzahl == true
或stueckzahl == false
,如果你把数字作为函数的参数,这将永远不会是真的。
在你的情况下,看起来你想要的是一系列如果:
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
- AJAX:$_GET不返回任何值
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 如果值为空,如何设置输入的默认值?jQuery
- 骨干模型默认值-todos.js示例中不必要的代码
- JQuery BlockUI鼠标加载光标没有't在Google Chrome中返回默认值
- 如何从Map返回默认值
- javascript:input字段在隐藏时返回默认值
- 如果文本框为空,则将其返回到默认值
- PHP 设置默认值以从 ajax 页面返回记录
- 我想在点击事件发生后将光标更改为等待,然后返回默认值
- 如果未返回任何值,则保持货币格式的JQgrid单元格为空,不带默认值
- 从一个模型到另一个模型的引用var在Backbone中返回默认值
- JavaScript返回默认值
- ExtJS Combo默认值返回null
- switch/case总是返回默认值
- 将默认值返回到预定义的 JavaScript 对象
- Javascript:如果参数未作为函数调用,则返回默认值
- Javascript函数返回默认值,而不是当前输入文本框的值
- Jquery实时点击导致双窗口打开,不能返回false,防止默认值,或者只是让链接直接停止