JavaScript是NaN,但我知道它不是?

时间:2010-01-14 12:26:53

标签: javascript nan

我有以下两个功能......

function splitTitleString(titleText)
{   
    var titleText = titleText;
    var temp = new Array();
    temp = titleText.split(' - ');
    var now = new Date().getTime();
    var warningExpResp = 7200000;
    var expRespDateTimeTicks = 0;
    var slaDateTimeTicks = 0; 

    if(temp[0].length > 0)
    {
    slaDateTimeTicks = getTicks(temp[0]);
    }

    if(temp[1].length > 0)
    {
        expRespDateTimeTicks = getTicks(temp[1]);
    }

    var returnTicksArray = new Array(slaDateTimeTicks,expRespDateTimeTicks);

    return returnTicksArray;
}

和...

function  warning(titleText, serverDateTime, warningLengthMins, warningType)
{
    var warningLengthTicks = warningLengthMins * (60 * 1000);
    var ticks = new Array(splitTitleString(titleText));
    var sla = parseInt(ticks[0]);
    var resp = parseInt(ticks[1]);
    var serverTicks = getTicks(serverDateTime);

    // some other work....
}

我遇到的问题是'resp'总是NaN,即使'ticks 1'肯定是?

PS:我不是JavaScript开发人员,所以如果代码很差,请不要好。

4 个答案:

答案 0 :(得分:3)

如果您在resp函数之外访问warning(),则问题在于使用var resp,您只能在包含函数中定义一个可见的新变量< / em>的。如果resp应该是一个全局变量,请删除var关键字,你应该没问题。

请参阅此处,了解Javascript中的本地和全局变量的简要说明:Variable scope and the var keyword

答案 1 :(得分:0)

除了Pekka正确说的,parseInt更喜欢有一个基数参数。来自文档:

  

如果省略radix参数,   JavaScript假设如下:

     
      
  • 如果字符串以“0x”开头,则为   基数为16(十六进制)
  •   
  • 如果   字符串以“0”开头,基数为8   (八进制)。不推荐使用此功能
  •   
  • 如果字符串以任何其他字符串开头   值,基数为10(十进制)
  •   

答案 2 :(得分:0)

你传递的是什么“titleText”参数,检查它是否确实是一个int。我的意思是[1]

答案 3 :(得分:0)

您的splitTitleString()会返回一个数组值。

但是,当您定义ticks时,您说var ticks = new Array(splitTitleString(titleText));。您定义一个由一个元素组成的数组 - splitTitleString的返回值。

结果,ticks[0]显然不是整数,它是一个数组!

编辑:要修复它,请重写您的函数:

function  warning(titleText, serverDateTime, warningLengthMins, warningType) 
{ 
    var warningLengthTicks = warningLengthMins * (60 * 1000); 
    //I removed the "new Array()" from the next line
    var ticks = splitTitleString(titleText); 
    var sla = parseInt(ticks[0]); 
    var resp = parseInt(ticks[1]); 
    var serverTicks = getTicks(serverDateTime); 

    // some other work.... 
}