2010-01-14 4 views
1

У меня есть следующие две функции ...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.... 
} 

Проблема у меня есть «соответственно» всегда NaN, даже если «клещами 1» наиболее определенно?

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

+0

я совершенно не понимаю, что вы пытаетесь достичь здесь. – mauris

+0

Где вы используете 'resp', что он возвращает' NaN'? –

+1

[OT] FWIW, так как я знаю, что вы новичок в JS, эта строка не имеет никакого эффекта: 'var titleText = titleText;' Параметр 'titleText' уже определен внутри функции точно так же, как' var' определяет он (и вы можете изменить его значение внутри функции, так как это не влияет на функцию, переменные JavaScript всегда передаются по значению). –

ответ

0

Ваш splitTitleString() возвращает значение массива.

Однако, когда вы определяете ticks, вы говорите var ticks = new Array(splitTitleString(titleText));. Вы определяете массив, который состоит из одного элемента - возвращаемого значения splitTitleString.

В результате ticks[0], очевидно, не является целым числом, это массив!

EDIT: Для того, чтобы это исправить, переписать функцию так:

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

Спасибо, это действительно проблема :-) – Dooie

3

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

Смотрите здесь хороший изношенном на локальных и глобальных переменных в Javascript: Variable scope and the var keyword

0

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

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

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

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

Смежные вопросы