JS 函数创建并推入数组 - 只有第一个元素是 NaN

JS function create and push into array - only first element is 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,而其他的看起来都不错。

在您当前的代码中,tip 直到 calculator 中的 if (bill... 测试才被分配给 calculatorbelow 分配给 finalBill。在 之后分配给 finalBill 创建 tip,这不仅不会导致没有 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.roundMath.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);

只有一个变化:var tip = 0;

var tipsArray = [];
var finalBillArray = [];
var tip = 0;
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);

提示只能在计算/初始化后使用。

finalBill = tip + bill;

您正在使用 tip 而未对其进行初始化,因此 - NUM + NAN = NAN

function calculator(bill) {
    if (bill < 50) {
        tip = bill * 0.2;
    } else if (bill >= 50 && bill <= 200) {
        tip = bill * 0.15;
    } else {
       tip = bill * 0.1;
    }
    finalBill = tip + bill;
    tipsArray.push(tip);
    finalBillArray.push(finalBill);

    }

你的问题是当你调用函数时你的 tip 变量没有初始化,换句话说它是 undefined,所以当你调用 :

finalBill = tip + bill;

它将 return NaN 因为 undefined+bill 不是有效的 Number.

解法:

您只需要在 if 块之后放置 finalBill = tip + bill; 行,这样 tip 变量就可以正确初始化。

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

演示:

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

function calculator(bill) {

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

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

    }

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

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