为什么我的 JavaScript 开关返回 "NaN"?
Why is my JavaScript switch returning "NaN"?
我必须创建一个票价计算器,它还可以计算附加费率和金额。
我的票价开关有效,但在提示中输入大小写后,附加费率 returns 的开关为 NaN。
我已经将函数 surchargeRate(cardType) 返回的值转换为一个数字,但出于某种原因它仍然给我 NaN。
我一直在试图弄清楚问题出在哪里,但无法弄清楚。
这是我的代码:
function surchargeRate(cardType) {
var surchargeRate;
switch (cardType) {
case "1":
surchargeRate = 0.02;
break;
case "2":
surchargeRate = 0.01;
break;
} // end switch
return surchargeRate;
}
// This function calculates the surcharge amount.
function surchargeAmount(ticketCost, surchargeRate) {
return ticketCost * surchargeRate;
}
function determineTicketPrice(seatingAreaCategory) {
var ticketPrice;
switch (seatingAreaCategory) {
case "S":
case "s":
ticketPrice = 180;
break;
case "C":
case "c":
ticketPrice = 150;
break;
case "B":
case "b":
ticketPrice = 100;
break;
case "R":
case "r":
ticketPrice = 70;
break;
default:
ticketPrice = 0;
break;
} // end switch
return ticketPrice;
}
function totalAmount(ticketPrice, ticketQty) {
return ticketPrice * ticketQty;
}
function validateQty(ticketQty) {
if (ticketQty >= 1 && ticketQty <= 20) {
return true;
} else {
alert("Ticket number must be between 1 and 20");
return false;
}
}
function init() {
surchargeRate = surchargeRate(cardType);
surchargeRate = Number(surchargeRate);
var surcharge;
var finalCost;
if (surchargeRate == -1) {
surchargeRate = new Error("Invalid input");
} else {
surcharge = surchargeAmount(ticketCost, surchargeRate);
}
finalCost = surcharge + ticketCost;
var seatingAreaCategory;
seatingAreaCategory = prompt("Please enter seating area category: ");
var ticketPrice = determineTicketPrice(seatingAreaCategory);
ticketPrice = Number(ticketPrice);
var ticketQty;
ticketQty = prompt("Please enter ticket quantity: ");
ticketQty = Number(ticketQty);
var ticketCost;
ticketCost = totalAmount(ticketPrice, ticketQty);
var cardType;
cardType = prompt("Enter your Card type. Enter 1 for American Express and 2 for Visa/Mastercard ");
var validQty = validateQty(ticketQty);
console.log(cardType);
console.log(surchargeRate);
var seatOut = document.getElementById("seatingArea").innerHTML = "Your seating area is: " + seatingAreaCategory;
var priceOut = document.getElementById("pricePerTicket").innerHTML = "Price per ticket: " + ticketPrice;
var validQtyOut = document.getElementById("ticketQty").innerHTML = "Number of tickets ordered: " + ticketQty.toFixed(2);
var beforeSurchargeOut = document.getElementById("beforeSurcharge").innerHTML = "Gross amount: " + ticketCost;
var surchargeOut = document.getElementById("surcharge").innerHTML = "Card fee: " + surcharge;
var costOut = document.getElementById("amountDue").innerHTML = "Amount due: " + finalCost;
}
window.onload = init;
- 默认值
var surchargeRate = 0;
或 default: surchargeRate = 0;
和 var ticketPrice = 0;
- 没有
var
的变量提升 - 函数 windows.surchargeRate
被 surchargeRate = surchargeRate(cardType);
覆盖
- Init 在没有任何输入的情况下进行大量计算 - 首先获取输入,然后使用它
function surchargeRate(cardType) {
var surchargeRate;
switch (cardType) {
case "1":
surchargeRate = 0.02;
break;
case "2":
surchargeRate = 0.01;
break;
} // end switch
return surchargeRate;
}
// This function calculates the surcharge amount.
function surchargeAmount(ticketCost, surchargeRate) {
return ticketCost * surchargeRate;
}
function determineTicketPrice(seatingAreaCategory) {
var ticketPrice = 0;
switch (seatingAreaCategory) {
case "S":
case "s":
ticketPrice = 180;
break;
case "C":
case "c":
ticketPrice = 150;
break;
case "B":
case "b":
ticketPrice = 100;
break;
case "R":
case "r":
ticketPrice = 70;
break;
default:
ticketPrice = 0;
break;
} // end switch
return ticketPrice;
}
function totalAmount(ticketPrice, ticketQty) {
return ticketPrice * ticketQty;
}
function validateQty(ticketQty) {
if (ticketQty >= 1 && ticketQty <= 20) {
return true;
} else {
alert("Ticket number must be between 1 and 20");
return false;
}
}
function init() {
var beforeSurchargeOut = document.getElementById("beforeSurcharge");
var costOut = document.getElementById("amountDue");
var priceOut = document.getElementById("pricePerTicket");
var seatOut = document.getElementById("seatingArea");
var surchargeOut = document.getElementById("surcharge");
var validQtyOut = document.getElementById("ticketQty");
var surcharge;
var finalCost;
var seatingAreaCategory;
seatingAreaCategory = prompt("Please enter seating area category: ");
var ticketPrice = determineTicketPrice(seatingAreaCategory);
ticketPrice = Number(ticketPrice);
var ticketQty;
ticketQty = prompt("Please enter ticket quantity: ");
ticketQty = Number(ticketQty);
var ticketCost;
ticketCost = totalAmount(ticketPrice, ticketQty);
var cardType;
cardType = prompt("Enter your Card type. Enter 1 for American Express and 2 for Visa/Mastercard ");
var validQty = validateQty(ticketQty);
if (surcharge == -1) {
surcharge = new Error("Invalid input");
} else {
surcharge = surchargeAmount(ticketCost, surchargeRate(cardType));
}
finalCost = surcharge + ticketCost;
console.log(cardType);
console.log(surcharge);
beforeSurchargeOut.innerHTML = "Gross amount: " + ticketCost.toFixed(2);
costOut.innerHTML = "Amount due: " + finalCost.toFixed(2);
priceOut.innerHTML = "Price per ticket: " + ticketPrice.toFixed(2);
seatOut.innerHTML = "Your seating area is: " + seatingAreaCategory;
surchargeOut.innerHTML = "Card fee: " + surcharge.toFixed(2);
validQtyOut.innerHTML = "Number of tickets ordered: " + ticketQty;
}
window.onload = init;
<span id="beforeSurcharge"></span><br/>
<span id="amountDue"></span><br/>
<span id="pricePerTicket"></span><br/>
<span id="seatingArea"></span><br/>
<span id="surcharge"></span><br/>
<span id="ticketQty"></span><br/>
我必须创建一个票价计算器,它还可以计算附加费率和金额。
我的票价开关有效,但在提示中输入大小写后,附加费率 returns 的开关为 NaN。
我已经将函数 surchargeRate(cardType) 返回的值转换为一个数字,但出于某种原因它仍然给我 NaN。
我一直在试图弄清楚问题出在哪里,但无法弄清楚。
这是我的代码:
function surchargeRate(cardType) {
var surchargeRate;
switch (cardType) {
case "1":
surchargeRate = 0.02;
break;
case "2":
surchargeRate = 0.01;
break;
} // end switch
return surchargeRate;
}
// This function calculates the surcharge amount.
function surchargeAmount(ticketCost, surchargeRate) {
return ticketCost * surchargeRate;
}
function determineTicketPrice(seatingAreaCategory) {
var ticketPrice;
switch (seatingAreaCategory) {
case "S":
case "s":
ticketPrice = 180;
break;
case "C":
case "c":
ticketPrice = 150;
break;
case "B":
case "b":
ticketPrice = 100;
break;
case "R":
case "r":
ticketPrice = 70;
break;
default:
ticketPrice = 0;
break;
} // end switch
return ticketPrice;
}
function totalAmount(ticketPrice, ticketQty) {
return ticketPrice * ticketQty;
}
function validateQty(ticketQty) {
if (ticketQty >= 1 && ticketQty <= 20) {
return true;
} else {
alert("Ticket number must be between 1 and 20");
return false;
}
}
function init() {
surchargeRate = surchargeRate(cardType);
surchargeRate = Number(surchargeRate);
var surcharge;
var finalCost;
if (surchargeRate == -1) {
surchargeRate = new Error("Invalid input");
} else {
surcharge = surchargeAmount(ticketCost, surchargeRate);
}
finalCost = surcharge + ticketCost;
var seatingAreaCategory;
seatingAreaCategory = prompt("Please enter seating area category: ");
var ticketPrice = determineTicketPrice(seatingAreaCategory);
ticketPrice = Number(ticketPrice);
var ticketQty;
ticketQty = prompt("Please enter ticket quantity: ");
ticketQty = Number(ticketQty);
var ticketCost;
ticketCost = totalAmount(ticketPrice, ticketQty);
var cardType;
cardType = prompt("Enter your Card type. Enter 1 for American Express and 2 for Visa/Mastercard ");
var validQty = validateQty(ticketQty);
console.log(cardType);
console.log(surchargeRate);
var seatOut = document.getElementById("seatingArea").innerHTML = "Your seating area is: " + seatingAreaCategory;
var priceOut = document.getElementById("pricePerTicket").innerHTML = "Price per ticket: " + ticketPrice;
var validQtyOut = document.getElementById("ticketQty").innerHTML = "Number of tickets ordered: " + ticketQty.toFixed(2);
var beforeSurchargeOut = document.getElementById("beforeSurcharge").innerHTML = "Gross amount: " + ticketCost;
var surchargeOut = document.getElementById("surcharge").innerHTML = "Card fee: " + surcharge;
var costOut = document.getElementById("amountDue").innerHTML = "Amount due: " + finalCost;
}
window.onload = init;
- 默认值
var surchargeRate = 0;
或default: surchargeRate = 0;
和var ticketPrice = 0;
- 没有
var
的变量提升 - 函数windows.surchargeRate
被surchargeRate = surchargeRate(cardType);
覆盖
- Init 在没有任何输入的情况下进行大量计算 - 首先获取输入,然后使用它
function surchargeRate(cardType) {
var surchargeRate;
switch (cardType) {
case "1":
surchargeRate = 0.02;
break;
case "2":
surchargeRate = 0.01;
break;
} // end switch
return surchargeRate;
}
// This function calculates the surcharge amount.
function surchargeAmount(ticketCost, surchargeRate) {
return ticketCost * surchargeRate;
}
function determineTicketPrice(seatingAreaCategory) {
var ticketPrice = 0;
switch (seatingAreaCategory) {
case "S":
case "s":
ticketPrice = 180;
break;
case "C":
case "c":
ticketPrice = 150;
break;
case "B":
case "b":
ticketPrice = 100;
break;
case "R":
case "r":
ticketPrice = 70;
break;
default:
ticketPrice = 0;
break;
} // end switch
return ticketPrice;
}
function totalAmount(ticketPrice, ticketQty) {
return ticketPrice * ticketQty;
}
function validateQty(ticketQty) {
if (ticketQty >= 1 && ticketQty <= 20) {
return true;
} else {
alert("Ticket number must be between 1 and 20");
return false;
}
}
function init() {
var beforeSurchargeOut = document.getElementById("beforeSurcharge");
var costOut = document.getElementById("amountDue");
var priceOut = document.getElementById("pricePerTicket");
var seatOut = document.getElementById("seatingArea");
var surchargeOut = document.getElementById("surcharge");
var validQtyOut = document.getElementById("ticketQty");
var surcharge;
var finalCost;
var seatingAreaCategory;
seatingAreaCategory = prompt("Please enter seating area category: ");
var ticketPrice = determineTicketPrice(seatingAreaCategory);
ticketPrice = Number(ticketPrice);
var ticketQty;
ticketQty = prompt("Please enter ticket quantity: ");
ticketQty = Number(ticketQty);
var ticketCost;
ticketCost = totalAmount(ticketPrice, ticketQty);
var cardType;
cardType = prompt("Enter your Card type. Enter 1 for American Express and 2 for Visa/Mastercard ");
var validQty = validateQty(ticketQty);
if (surcharge == -1) {
surcharge = new Error("Invalid input");
} else {
surcharge = surchargeAmount(ticketCost, surchargeRate(cardType));
}
finalCost = surcharge + ticketCost;
console.log(cardType);
console.log(surcharge);
beforeSurchargeOut.innerHTML = "Gross amount: " + ticketCost.toFixed(2);
costOut.innerHTML = "Amount due: " + finalCost.toFixed(2);
priceOut.innerHTML = "Price per ticket: " + ticketPrice.toFixed(2);
seatOut.innerHTML = "Your seating area is: " + seatingAreaCategory;
surchargeOut.innerHTML = "Card fee: " + surcharge.toFixed(2);
validQtyOut.innerHTML = "Number of tickets ordered: " + ticketQty;
}
window.onload = init;
<span id="beforeSurcharge"></span><br/>
<span id="amountDue"></span><br/>
<span id="pricePerTicket"></span><br/>
<span id="seatingArea"></span><br/>
<span id="surcharge"></span><br/>
<span id="ticketQty"></span><br/>