为什么条件无法执行?

时间:2017-06-11 11:13:44

标签: javascript arrays

我编写了一个函数 showWorthSum()来返回数组的总和。确实如此,但是如果一个数组的元素是一个数字,那么它也会设置一个条件,那么它应该只计算并且应该跳过rest,但是在NaN的情况下它会进入if块并使整个结果为NaN。为什么?

function addWorth()
{    
    var table1= document.getElementById("tableNetWorths");

    var rowCount1= table1.rows.length;

    //var row1= table1.insertRow(rowCount1);

   var arr= [];

   for(var count = 0; count < rowCount1; count++)
   {    
        arr.push(table1.rows[count].cells[1].innerHTML);          
   }

   arr.shift();
   return arr;
} 

function showWorthSum()
{
    var returnedArr= addWorth();

    //returnedArr.push(addWorth());

     totalWorth= 0;

    var arrCount= returnedArr.length;

    for(var count = 0; count < arrCount; count++)
    {    
            if(typeof(parseInt(returnedArr[count])) == 'number')
            {
                totalWorth= parseInt(totalWorth)+ parseInt(returnedArr[count]); 
                //document.write(returnedArr[count]);

            }
    }

    return parseInt(totalWorth);
}

数组: {100.200。 &#39; asdadasd&#39;,322,22}

按钮:

<button class="btn btn-primary" onclick="document.write(showWorthSum())" type="button">Show Sum</button>

2 个答案:

答案 0 :(得分:1)

请改为isNaN(parseInt(returnedArr[count])) === false

虽然根据定义NaNNot A Number,但typeof NaNnumber

因此,要检查变量是否为数字,请使用isNaN(value) === false!isNaN(value)

示例:

  • isNaN(5) => false
  • isNaN("5") => false
  • isNaN("-5") => false
  • isNaN(true) => false
  • isNaN(false) => false
  • isNaN({}) => true
  • isNaN(NaN) => true
  • isNaN("test") => true
  • isNaN("5test") => true
  • isNaN("test5") => true

因此,您也可以使用!isNaN(returnedArr[count])缩短

答案 1 :(得分:1)

而不是“typeof(parseInt(returnedArr [count]))=='number'”,你可以使用isFinite(returnedArr [count])。

isFinite('foo')
false

isFinite('10')
true

isFinite(10)
true

isFinite('898.0900')
true