JavaScript est un NAN, mais je sais que ce n'est pas?
-
20-09-2019 - |
Question
Je les deux fonctions suivantes ...
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....
}
Le problème que j'ai est 'resp' est toujours NaN même si 'tiques 1 ' est certainement le plus?
PS: Je ne suis pas un JavaScript développeur donc s'il vous plaît bien si c'est le code pauvre .
La solution
Votre splitTitleString()
retourne une valeur de tableau.
Cependant, lorsque vous définissez ticks
, vous dites var ticks = new Array(splitTitleString(titleText));
. Vous définissez un tableau qui se compose d'une element- la valeur de retour de splitTitleString.
Par conséquent, ticks[0]
est évidemment pas un entier, il est un tableau!
EDIT: Pour résoudre ce problème, réécrire votre fonction comme ceci:
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....
}
Autres conseils
Si vous accédez à resp
en dehors de la fonction warning()
, votre problème est que, en utilisant var resp
, vous définissez une nouvelle variable qui est visible uniquement dans la fonction contenant . Si resp est censé être une variable globale, supprimer le mot-clé var
et vous devriez être bien.
Voir ici pour une belle diminution des effectifs sur les variables locales et globales en Javascript: portée variable et le var mot-clé
En dehors de ce que Pekka dit à juste titre, parseInt préfère avoir un paramètre radix. De la documentation:
Si le paramètre radix est omis, JavaScript suppose ce qui suit:
- Si la chaîne commence par « 0x », le radix est de 16 (hexadécimal)
- Si la chaîne commence par « 0 », le radix est 8 (Octal). Cette fonction est dépréciée
- Si la chaîne commence par tout autre valeur, la base est de 10 (en décimal)
Que faites-vous passer comme paramètre « titletext », vérifier si elle est en effet un int. Je veux dire [1]