Вопрос

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

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, даже если 'тикает1" совершенно определенно есть?

PS:Я не являюсь JavaScript разработчик, поэтому, пожалуйста, будьте добры, если это плохой код.

Это было полезно?

Решение

Ваш 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.... 
} 

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top