簡體   English   中英

為什么我的 JavaScript 開關返回“NaN”?

[英]Why is my JavaScript switch returning "NaN"?

我必須創建一個票價計算器,它還可以計算附加費率和金額。

我的票價開關有效,但在我在提示中輸入案例后,附加費率的開關返回為 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;

  1. 默認值var surchargeRate = 0; default: surchargeRate = 0; var ticketPrice = 0;
  2. 不帶var的變量提升 - 函數windows.surchargeRatesurchargeRate = surchargeRate(cardType);覆蓋surchargeRate = surchargeRate(cardType);
  3. 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/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM