我正在尝试解决我当前正在做的一门课程的问题,但是我一直坚持为什么我的代码现在大约一个小时后返回未定义状态。
我已经改变了几件事,添加了括号以确保一切正常,idk还有什么可以尝试的。
var bills = [124, 48, 268];
function tipsCalculator(bill) {
switch (bill) {
case bill < 50:
return (bill * (20 / 100));
case bill >= 50 && bill <= 200:
return (bill * (15 / 100));
case bill > 200:
return (bill * (10 / 100));
}
}
var testing = tipsCalculator(bills[0]);
console.log(testing);
我希望它返回值合适的124 * whichever
格的计算。
答案 0 :(得分:6)
这不是switch
的有效用法。您将必须使用if
语句:
var bills = [124, 48, 268];
function tipsCalculator(bill) {
if (bill < 50)
return (bill * (20 / 100));
if (bill >= 50 && bill <= 200)
return (bill * (15 / 100));
if (bill > 200)
return (bill * (10 / 100));
}
var testing = tipsCalculator(bills[0]);
console.log(testing);
之所以不起作用,是因为诸如bill < 50
之类的表达式为布尔值-true
或false
。因此,当您的代码执行tipsCalculator(bills[0])
时,功能如下:
function tipsCalculator(124) { // bills[0] == 124
switch (124) {
case false: // 124 > 50 == false
return (124 * (20 / 100));
case true: // 124 >= 50 == true, 124 <= 200 == true, thus true && true == true
return (124 * (15 / 100));
case false: // 124 > 200 == false
return (124 * (10 / 100));
}
}
如您所见,唯一的情况是true
和false
,但是124
都不是,因此您的函数无需输入任何情况就可以完成,并且因为没有return语句执行后,返回值为undefined
。
答案 1 :(得分:3)
您以错误的方式使用了开关,您可以按以下方式使用它
var bills = [124, 48, 268];
function tipsCalculator(bill) {
let b = bill < 50 ? 1 : (bill <= 200 ? 2 : 3)
switch (b) {
case 1:
return (bill * (20 / 100));
case 2:
return (bill * (15 / 100));
case 3:
return (bill * (10 / 100));
}
}
var testing = tipsCalculator(bills[0]);
console.log(testing);
答案 2 :(得分:2)
尝试在true
情况下传递switch
。
var bills = [124, 48, 268];
function tipsCalculator(bill) {
switch (true) {
case (bill < 50):
return (bill * (20 / 100));
case (bill >= 50 && bill <= 200):
return (bill * (15 / 100));
case (bill > 200):
return (bill * (10 / 100));
}
}
var testing = tipsCalculator(bills[0]);
console.log(testing);