函数返回未定义的值,有点困惑

时间:2019-05-13 04:55:08

标签: javascript arrays function

我正在尝试解决我当前正在做的一门课程的问题,但是我一直坚持为什么我的代码现在大约一个小时后返回未定义状态。

我已经改变了几件事,添加了括号以确保一切正常,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格的计算。

3 个答案:

答案 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之类的表达式为布尔值-truefalse。因此,当您的代码执行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));
  }
}

如您所见,唯一的情况是truefalse,但是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);