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...
测试才被分配给 calculator
,below 分配给 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.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);
只有一个变化: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);
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...
测试才被分配给 calculator
,below 分配给 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.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);
只有一个变化: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);