javascript-JS函数创建并推入数组-唯一的第一个元素是NaN

var tipsArray = [];
var finalBillArray = [];
var tip;
var finalBill;

function calculator(bill) {
    finalBill = tip + bill;

    if (bill < 50) {
        tip = bill * 0.2;
    } else if (bill >= 50 && bill <= 200) {
        tip = bill * 0.15;
    } else {
        tip = bill * 0.1;
    }

    tipsArray.push(tip);
    finalBillArray.push(finalBill);

    }

calculator(124);
calculator(48);
calculator(268);

console.log(tipsArray);
console.log(finalBillArray);

我正在尝试解决UDEMY课程中的一项任务.而且不明白,为什么finalBillArray中只有第一个元素是NaN,但是其他元素看起来不错.

解决方法:

在您当前的代码中,直到if(bill …在计算器内部测试,在finalBill的分配之下)才分配给小费.创建小费后分配给finalBill,这不仅会导致没有NaN,而且还会给出您可以得到准确的结果(每个帐单的当前提示是根据上一个帐单的提示而不是当前帐单来计算的):

var tipsArray = [];
var finalBillArray = [];

function calculator(bill) {

  var tip;
  var finalBill;
  if (bill < 50) {
    tip = bill * 0.2;
  } else if (bill >= 50 && bill <= 200) {
    tip = bill * 0.15;
  } else {
    tip = bill * 0.1;
  }

  tipsArray.push(tip);
  finalBill = tip + bill;
  finalBillArray.push(finalBill);

}

calculator(124);
calculator(48);
calculator(268);

console.log(tipsArray);
console.log(finalBillArray);

如果您不喜欢那里的浮点数,则也可以使用Math.round; Math.round(tip * 100)/ 100;将舍入到小数点后两位. (如果您不需要数字,则可以使用toFixed(2)代替,这更简单)

var tipsArray = [];
var finalBillArray = [];

function calculator(bill) {

  var tip;
  var finalBill;
  if (bill < 50) {
    tip = bill * 0.2;
  } else if (bill >= 50 && bill <= 200) {
    tip = bill * 0.15;
  } else {
    tip = bill * 0.1;
  }
  tip = Math.round(tip * 100) / 100;

  tipsArray.push(tip);
  finalBill = tip + bill;
  finalBillArray.push(finalBill);

}

calculator(124);
calculator(48);
calculator(268);

console.log(tipsArray);
console.log(finalBillArray);
上一篇:javascript-将值传递给下一页


下一篇:内联声明的JavaScript变量的范围