添加数组值的函数返回NaN

Function to add values of array returns NaN

本文关键字:返回 NaN 函数 数组 添加      更新时间:2023-09-26

我有一个HTML表单,有一个文本框,你可以输入一个字符串,如"1+2+8",它会给你数字的总和。

我的脚本是为了添加数组"num"的所有数字并警告值。问题是警报显示NAN而不是总数。num中的值是浮点数,但警告仍然给出NaN。我看过这个问题,但这不是同一个问题。是什么原因造成的呢?

下面是HTML/JS

<html>
  <head>
    <script type="text/javascript">

      function handleClick(event)
      {

        alert(this.textBox1.value);
        var num = this.textBox1.value.split("+"); 

        //convert string array to numbers
        for(var i=0; i<num.length; i++)
        {
            num[i] = +num[i]; 
        }
       // add up the values
        for(var i=0; i<num.length; i++)
        {
            var total = i + total;
        }
        alert(total); //Displays NaN instead of total

        event.preventDefault(); // disable normal form submit behavior
        return false; // prevent further bubbling of event
      }
      function doit()
      {
        document.forms.myform.addEventListener("submit", handleClick, true);
        return true;
      }
    </script>
  </head>

  <body onload="doit()">
    <form name="myform">
      <div>
          <textarea name="textBox1" rows="10" cols="80">
1+1
         </textarea>
      </div>
      <input type="submit" value="Update"/>
    </form>
  </body>
</html>

在for循环外声明total变量并将其初始化为0。您还必须访问数组中的实际值(num[i]),而不是循环变量(i)。

解决方案如下:

var total = 0;
for(var i=0; i<num.length; i++)
{
    total = num[i] + total;
}

尝试使用parseFloat()函数显式解析它为浮动

parseFloat("3.14");

你可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat

将字符串转换为整数时使用parseInt()函数。parseFloat表示支持非整数