JavaScript - это NaN, но я знаю, что это не так?
-
20-09-2019 - |
Вопрос
У меня есть следующие две функции...
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]