javascript添加程序显示" NaN"错误

时间:2017-12-10 01:24:20

标签: javascript jquery

我的问题是关于这个简单的程序总是显示一个" 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"错误。有关如何解决此问题的任何提示?

5 个答案:

答案 0 :(得分:2)

<强>问题:

bonusmiles是数字(miles实际上是一个字符串)。你必须使用它们而不是它们不存在的.value属性(因此是undefined),所以:

totalMiles = (bonus.value + miles.value);

与:

相同
totalMiles = (undefined + undefined);

NaN

<强>修正:

直接使用bonusmiles(您仍然需要将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);

备注:

  1. prompt返回字符串,因此您必须首先将miles转换为数字,否则您将获得字符串连接而不是arithmitic添加。您无需转换bonus,因为它已经是一个数字。您还应该考虑将futureTrips转换为if之前的数字。
  2. 表达式不需要括号:(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.valuemiles.value,只需使用miles,因为milesprompt命令和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)