开发者

JavaScript is a NaN, but I know it's not?

开发者 https://www.devze.com 2022-12-16 04:11 出处:网络
I have the following two functions... function splitTitleString(titleText) { var titleText = titleText; var temp = new Array();

I have the following two functions...

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;
}

And...

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....
}

The problem I have is 'resp' is always NaN even开发者_C百科 though 'ticks1' most definitely is?

PS: I'm not a JavaScript developer so please be nice if it's poor code.


If you are accessing resp outside the warning() function, your problem is that by using var resp, you define a new variable that is visible only within the containing function. If resp is supposed to be a global variable, remove the var keyword and you should be fine.

See here for a nice rundown on local and global variables in Javascript: Variable scope and the var keyword


Your splitTitleString() returns an array value.

However, when you define ticks, you say var ticks = new Array(splitTitleString(titleText));. You define an array which consists of one element- the return value of splitTitleString.

As a result, ticks[0] is obviously not an integer, it is an array!

EDIT: To fix it, rewrite your function like this:

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.... 
} 


Apart from what Pekka correctly said, parseInt prefers to have a radix parameter. From the docs:

If the radix parameter is omitted, JavaScript assumes the following:

  • If the string begins with "0x", the radix is 16 (hexadecimal)
  • If the string begins with "0", the radix is 8 (octal). This feature is deprecated
  • If the string begins with any other value, the radix is 10 (decimal)


What are you passing as "titleText" parameter, check if it is indeed an int. I mean [1]

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号