我的问题是关于这个简单的程序总是显示一个" NaN"错误。
这个简单功能的代码将始终提醒" NaN"一个简单的加法指令的错误,我不知道如何解决这个问题。
该程序应该只添加里程和奖励,如果futureTrips
是任何大于0的值,则为1000.
我的代码是:
var miles;
var futureTrips;
var totalMiles;
var bonus;
miles = prompt("Please enter your current miles");
futureTrips = prompt("pleae enter amount of future trips");
if (futureTrips > 0){
(bonus = 1000);}
else{
(bonus = 0);}
totalMiles = (bonus.value + miles.value);
alert(totalMiles);
这将始终显示" NaN"错误。有关如何解决此问题的任何提示?
答案 0 :(得分:2)
<强>问题:强>
bonus
和miles
是数字(miles
实际上是一个字符串)。你必须使用它们而不是它们不存在的.value
属性(因此是undefined
),所以:
totalMiles = (bonus.value + miles.value);
与:
相同totalMiles = (undefined + undefined);
是NaN
。
<强>修正:强>
直接使用bonus
和miles
(您仍然需要将miles
转换为数字):
totalMiles = bonus + Number(miles);
工作片段
var miles;
var futureTrips;
var totalMiles;
var bonus;
miles = prompt("Please enter your current miles");
futureTrips = prompt("pleae enter amount of future trips");
futureTrips = Number(futureTrips);
if (futureTrips > 0) {
bonus = 1000;
} else {
bonus = 0;
}
totalMiles = bonus + Number(miles);
alert(totalMiles);
备注:强>
prompt
返回字符串,因此您必须首先将miles
转换为数字,否则您将获得字符串连接而不是arithmitic添加。您无需转换bonus
,因为它已经是一个数字。您还应该考虑将futureTrips
转换为if
之前的数字。(bonus = 1000);
等同于bonus = 1000;
。答案 1 :(得分:1)
在JavaScript
中,prompt
返回string
值。您无法对其应用.value
。
默认情况下,string
值会在添加之前转换为int
,并带有另一个整数(也称为强制)。但为了安全起见,您可以使用parseInt
手动将string
转换为int
。
将totalMiles = (bonus.value + miles.value);
更改为
totalMiles = (bonus.value + parseInt(miles));
答案 2 :(得分:0)
试试这个:
var totalMiles;
var bonus;
var miles = parseInt(prompt("Please enter your current miles"),10);
var futureTrips = parseInt(prompt("pleae enter amount of future trips"),10);
if (futureTrips > 0) {
bonus = 1000;
} else {
bonus = 0;
}
totalMiles = bonus + miles;
alert(totalMiles);
我总是使用parseInt
中的基数,如paarseInt(miles,10)
。或者使用parseFloat(miles)
。
也不要使用bonus.value
或miles.value
,只需使用miles
,因为miles
是prompt
命令和bonus
的返回字符串是一个数字。
答案 3 :(得分:0)
您的代码已修改:
var miles;
var futureTrips;
var totalMiles;
var bonus;
do{
miles = prompt("Please enter your current miles") ; //assigns a string value to variable
futureTrips = prompt("pleae enter amount of future trips");
miles = parseInt(miles); //convert string to number
futureTrips = parseInt(futureTrips);
}while( isNaN(miles + futureTrips) ); //optional loop, repeat prompts if NaN detected
if (futureTrips > 0){
(bonus = 1000);}
else{
(bonus = 0);}
totalMiles = (bonus + miles); // removed bonus.value, did you mean to use the Object.ValueOf() method?
alert(totalMiles);
答案 4 :(得分:0)
miles
是一个字符串。要将值作为整数得到,我建议而不是miles.value
执行parseInt(miles)