2017-06-11 26 views
0

我写了一个函数showWorthSum()返回一个数组的总和。它的确如此,但如果一个数组的元素是一个数字,那么它只应该被计算出来,其余的应该被跳过,但是仍然会在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。 'asdadasd',322,22}

按钮:

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

回答

1

试试这个isNaN(parseInt(returnedArr[count])) === false

虽然NaN被定义为Not A Numbertypeof 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])把它缩短

+0

那么什么是正确的语法? – Covert

+0

对不起,但还是NaN – Covert

+0

还没有工作NaN – Covert

1

而不是“typeof运算(parseInt函数(returnedArr [计数]))== '号' “,你可以使用isFinite(returnedArr [count])。

isFinite('foo') 
false 

isFinite('10') 
true 

isFinite(10) 
true 

isFinite('898.0900') 
true