使用数组中的NaN在javascript中出错

时间:2013-08-10 03:30:37

标签: javascript arrays nan

当我在javascript中执行此函数时,我得到NaN结果。看起来非常不合逻辑,因为在这个操作中使用的数组都是数字的,并且在我使用Alert()时正确显示;我把代码留在这里供你监督:

function calculation_errors(){      
    arr_error_P_t2=new Array();
    for(var i=0;i<arr_P_t1.length;i++){
        var K=new Number(arr_K_t1[i]);
        var P=new Number(arr_P_t1[i]);      
        arr_error_P_t2[i]=(Math.sqrt(1+Math.pow(m_t2,2)))*(Math.sqrt((Math.pow(1/K,2)+(Math.pow(1/P,2)))));
    }
    alert(arr_error_P_t2.join('\n'));
}

5 个答案:

答案 0 :(得分:2)

而是使用new Number(),只需将您的值乘以1 (your_val * 1)即可。它是将值转换为整数的最简单,最快捷的方法。

function calculation_errors() {
    arr_error_P_t2 = [];
    for (var i = 0; i < arr_P_t1.length; i++) {
        var K = arr_K_t1[i] * 1;
        var P = arr_P_t1[i] * 1;
        arr_error_P_t2[i] = (Math.sqrt(1 + Math.pow(m_t2, 2))) * (Math.sqrt((Math.pow(1 / K, 2) + (Math.pow(1 / P, 2)))));
    }
    alert(arr_error_P_t2.join('\n'));
}

答案 1 :(得分:2)

获得NaN的原因是因为您的数组arr_K_t1的长度小于数组arr_P_t1

for loop中: 您正在尝试使用语句

获取更大的数组元素

var K= arr_K_t1[i];

它返回undefined(因为你已超过arr_K_t1中的元素数。所以在javascript中,如果你试图访问一个不存在的数组元素,它会返回undefined

然后你正在对它进行数学运算,这显然会返回NaN(你得到的结果)。

解决方案是:

function calculation_errors(){      
    arr_error_P_t2=new Array();

    //COMMENT : You are assuming array "arr_K_t1" is atleast of length equal to 
    //array "arr_P_t1" in the for loop that follows 
    //THIS IS A WRONG ASSUMPTION AND IS LEADING TO THE "NaN" at the end !!
    ...
    ...
    ...rest of your code

编辑:我无法包含剩余的代码,因为它使帖子很奇怪。但问题在于for loop他正在访问一个不存在的元素。

答案 2 :(得分:0)

不要将数字转换为对象,这应解决您的NaN问题。

function calculation_errors(){      
    arr_error_P_t2=new Array();

    for(var i=0;i<arr_P_t1.length;i++){
        var K= arr_K_t1[i];
        var P= arr_P_t1[i];      
        arr_error_P_t2.push((Math.sqrt(1+Math.pow(m_t2,2)))*(Math.sqrt((Math.pow(1/K,2)+(Math.pow(1/P,2)))))); 
        //I prefer .push() but you don't have to use this part
    }

    alert(arr_error_P_t2.join('\n'));
}

答案 3 :(得分:0)

您必须在该数组中插入至少一项。

var arr_error_P_t2=[1]

答案 4 :(得分:-1)

为什么必须使用"new Number()"?如果你这样做,那将是一个对象。 物体无法直接打印。