JavaScript - это NaN, но я знаю, что это не так? - PullRequest
1 голос
/ 14 января 2010

У меня есть две следующие функции ...

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 ]

3 голосов
/ 14 января 2010

Если вы обращаетесь к resp вне функции warning(), ваша проблема в том, что с помощью var resp вы определяете новую переменную, видимую только внутри содержащей функции . Если соответственно предполагается глобальная переменная, удалите ключевое слово var, и все будет в порядке.

Смотрите здесь краткое описание локальных и глобальных переменных в Javascript: Область действия переменной и ключевое слово var

0 голосов
/ 14 января 2010

Ваш 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.... 
} 
0 голосов
/ 14 января 2010

Что вы передаете в качестве параметра "titleText", проверьте, действительно ли это int. Я имею в виду [1]

0 голосов
/ 14 января 2010

Помимо того, что правильно сказал Пекка, parseInt предпочитает иметь параметр radix. Из документов:

Если параметр radix опущен, JavaScript предполагает следующее:

  • Если строка начинается с «0x», основание 16 (шестнадцатеричное)
  • Если Строка начинается с "0", основание 8 (Восьмеричное). Эта функция устарела
  • Если строка начинается с любого другого значение, основание 10 (десятичное)
...