为我的javascript类简介做一个项目,并且无法弄清楚为什么这不起作用。谁能帮我吗?这是我的作业代码。
//Declare variables
var guestsPerRoom;
var discount;
var goodView;
var totalCost;
var costPerNight;
var membership;
//prompt user to enter info based on their needs
guestsPerRoom = prompt("How many guests will be staying in this room? (Max 6)");
discount = prompt("Are you a member of AAA?");
goodView = prompt("Would you like a room with a good view? (10% Price Increase)");
//Calculate guests needs to total cost
totalCost = Number(totalCost);
discount = Number(discount);
costPerNight = Number(costPerNight);
//Output users total cost
if (guestsPerRoom === 1 || guestsPerRoom === 2) {
costPerNight = 50;
if (membership === 'Y') {
discount = costPerNight * 0.85;
}
else if (membership === 'N') {
discount = costPerNight;
}
if (goodView === 'Y') {
totalCost = costPerNight * discount * 1.1;‹
}
else if (goodView === 'N') {
totalCost = costPerNight * discount;
}
}
document.write("Total cost per night is $" + totalCost);
当我运行该程序时,我希望得到“每晚总费用为50美元(或总费用)。”有人能告诉我我做错了吗?我的猜测是我的总成本变量没有定义,但我无法弄清楚。
答案 0 :(得分:4)
问题是您正在尝试将这两个问题转换为数字非数字答案:
discount = prompt("Are you a member of AAA?");
goodView = prompt("Would you like a room with a good view? (10% Price Increase)");
discount = Number(discount);
costPerNight = Number(costPerNight);
当然,这些答案不是数字。因此错误。
答案 1 :(得分:2)
看起来像是
discount = prompt("Are you a member of AAA?");
应该是
membership = prompt("Are you a member of AAA?");
因为你有
if (membership === 'Y') {
但您从未设置成员资格变量。然后你只需删除这一行:
discount = Number(discount);
答案 2 :(得分:1)
此代码存在一些问题。首先,guestsPerRoom
从提示中获取字符串值,因此三重===
严格'如果将操作员与数字进行比较,操作员将无法工作。您要么必须确保它们是相同的类型(字符串或两者都是),要么使用非严格比较==
。
然后,membership
在开始在ifs中使用它之前没有获得值,因为您将提示的结果存储在discount
中。
此外,totalCost = Number(totalCost)
会导致totalCost变为NaN
,因为您之前没有给它一个值。由于其他变量也没有,或不正确或意外,因此永远不会输入if
树,totalCost
永远不会获得与最初收到的NaN
不同的值。这就是你在输出中看到NaN的原因。
建议提示:使用console.log(totalCost)
检查totalCost
(当然其他变量也是如此)。您可以在代码中输入几行,以便将这些值输出到控制台(按F12将其打开)。这样,您可以检查值和代码路径,而不会阻止执行。您也可以使用调试器来逐步执行代码,但这有点难以掌握。
答案 3 :(得分:1)
prompt
返回的值是一个字符串(如果取消则返回null),因此当您尝试使用===
将值与数字进行比较时,它将不匹配。
您可以使用==
运算符进行类型宽松比较,但最好将数字作为数字而不是字符串处理。将值解析为数字,然后比较它们的方式将起作用:
guestsPerRoom = parseInt(prompt("How many guests will be staying in this room? (Max 6)"), 10);
您将成员资格问题的结果分配给discount
变量,它应该是:
membership = prompt("Are you a member of AAA?");
在接下来的几行中,您可以将totalCost
,discount
和costPerNight
中的值转换为数字,但您还没有为它们分配任何内容(除了已分配成员资格的折扣)值)。
当您设置discount
值时使用costPerNight
,但稍后将该值与costPerNight
相乘,这样会使总费用成为costPerNight
的平方。只需将折扣因子分配给变量:
if (membership === 'Y') {
discount = 0.85;
}
else if (membership === 'N') {
discount = 1.0;
}
答案 4 :(得分:0)
您必须检查输入是否为数字,因为您使用的是“===”,它关注var的类型,因此您需要确保验证用户输入。任何文本输入或“怪异”输入都会导致'NaN'类型。