JavaScript es un NaN, pero yo sé que no es?
-
20-09-2019 - |
Pregunta
Tengo las siguientes dos funciones ...
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;
}
Y ...
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....
}
El problema que tengo es 'resp' está siempre NaN a pesar de que 'garrapatas 1 ' definitivamente es?
PD: No soy un JavaScript desarrollador así que por favor sea agradable si se trata de código de pobres .
Solución
Su splitTitleString()
devuelve un valor de matriz.
Sin embargo, cuando se define ticks
, se dice var ticks = new Array(splitTitleString(titleText));
. Se define una matriz que consiste en una element- el valor de retorno de splitTitleString.
Como resultado, ticks[0]
obviamente no es un entero, es una matriz!
EDIT: Para solucionarlo, reescribir su función 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....
}
Otros consejos
Si accede a resp
fuera de la función warning()
, su problema es que mediante el uso de var resp
, se define una nueva variable que es visible sólo dentro de la función que contiene . Si resp se supone que es una variable global, quite la palabra clave var
y que debe estar bien.
Vea aquí por un buen resumen de las variables locales y globales en Javascript: alcance variable y la var palabra clave
Además de lo que dijo Pekka correctamente, parseInt prefiere tener un parámetro radix. A partir de los documentos:
Si se omite el parámetro radix, JavaScript supone lo siguiente:
- Si la cadena comienza con "0x", la radix es 16 (hexadecimal)
- Si el cadena comienza con "0", la raíz es 8 (Octal). Esta característica está en desuso
- Si la cadena comienza con cualquier otra valor, el radix es 10 (decimal)
¿Qué estás pasando como parámetro "TitleText", comprobar si es de hecho un int. Me refiero a [1]