JavaScript é um NaN, mas eu sei que não é?
-
20-09-2019 - |
Pergunta
Eu tenho duas funções a seguir...
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;
}
E...
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....
}
O problema que eu tenho é 'resp' é sempre NaN mesmo que " carrapatos1'definitivamente é?
PS:Eu não sou um JavaScript desenvolvedor então por favor, seja agradável se é pobre código.
Solução
Sua splitTitleString()
Retorna um valor de matriz.
No entanto, quando você define ticks
, você diz var ticks = new Array(splitTitleString(titleText));
. Você define uma matriz que consiste em um elemento- o valor de retorno da divisão.
Como resultado, ticks[0]
Obviamente, não é um número inteiro, é uma matriz!
Editar: Para corrigi -lo, reescreva sua função como esta:
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....
}
Outras dicas
Se você estiver acessando resp
fora o warning()
função, o problema é que, ao utilizar var resp
, você pode definir uma nova variável que é visível apenas dentro da função contendo.Se a resp é suposto ser uma variável global, remover o var
palavra-chave e você deve ser fino.
Veja aqui um bom resumo sobre o local e o global variáveis em Javascript: Escopo de variável e a palavra-chave var
Além do que Pekka disse corretamente, o Parseint prefere ter um parâmetro Radix. Dos documentos:
Se o parâmetro Radix for omitido, JavaScript assume o seguinte:
- Se a string começar com "0x", o Radix terá 16 (hexadecimal)
- Se a string começar com "0", o Radix será 8 (octal). Este recurso está depreciado
- Se a string começar com qualquer outro valor, o Radix será 10 (decimal)
O que você está passando como o parâmetro "titletext", verifique se é realmente um int. Quero dizer [1