JavaScript ist ein NaN, aber ich weiß, es ist nicht wahr?
-
20-09-2019 - |
Frage
Ich habe die folgenden zwei Funktionen ...
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;
}
Und ...
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....
}
Das Problem, das ich habe, ist 'bzw.' ist immer NaN obwohl Zecken 1 ' definitiv ist?
PS: Ich bin kein JavaScript Entwickler also bitte schön, wenn es schlecht Code ist .
Lösung
Ihre splitTitleString()
gibt ein Array-Wert.
Wenn Sie jedoch ticks
definieren, sagen Sie var ticks = new Array(splitTitleString(titleText));
. Sie definieren ein Array, das aus einem Element- der Rückgabewert von splitTitleString besteht.
Als Ergebnis ticks[0]
ist offensichtlich nicht eine ganze Zahl, es ist ein Array!
EDIT: Um es zu beheben, neu zu schreiben Ihre Funktion wie folgt aus:
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....
}
Andere Tipps
Wenn Sie resp
außerhalb der warning()
Funktion zugreifen, Ihr Problem ist, dass var resp
unter Verwendung Sie eine neue Variable definieren, die sichtbar ist nur in der Funktion enthalten . Wenn bzw. soll eine globale Variable sein, die var
Keyword entfernen und Sie sollten in Ordnung sein.
Sehen Sie hier für einen schönen Überblick über lokale und globale Variablen in Javascript: Variable Umfang und die var Stichwort
Neben was Pekka richtig gesagt, zieht ParseInt einen Radix Parameter haben. Aus der Dokumentation:
Wenn der Radix Parameter weggelassen wird, JavaScript wird Folgendes vorausgesetzt:
- Wenn die Zeichenfolge beginnt mit „0x“, die Radix ist 16 (hexadezimal)
- Wenn die String beginnt mit "0", die Radix 8 (Oktal). Diese Funktion ist veraltet
- Wenn die Zeichenfolge beginnt mit einem anderen Wert, der Radix ist 10 (dezimal)
Was Sie als „title“ Parameter, die Prüfung sind vorbei, wenn es in der Tat ein int. Ich meine [1]