JavaScript è un NaN, ma io so che non è?
-
20-09-2019 - |
Domanda
Ho le seguenti due funzioni ...
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....
}
Il problema che ho è 'resp' è sempre NaN anche se 'le zecche 1 ' sicuramente è?
PS: io non sono un JavaScript sviluppatore quindi cerca di essere bello se si tratta di codice poveri .
Soluzione
Il tuo splitTitleString()
restituisce un valore di matrice.
Tuttavia, quando si definiscono ticks
, dici var ticks = new Array(splitTitleString(titleText));
. Si definisce una matrice costituita da uno elemento- il valore restituito splitTitleString.
Come risultato, ticks[0]
non è ovviamente un numero intero, è un array!
EDIT: Per risolvere il problema, riscrivere la funzione in questo modo:
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....
}
Altri suggerimenti
Se si accede resp
di fuori della funzione warning()
, il problema è che utilizzando var resp
, si definisce una nuova variabile che è visibile solo all'interno della funzione di contenimento . Se resp si suppone che sia una variabile globale, rimuovere la parola chiave var
e si dovrebbe andare bene.
Vedi qui per una bella carrellata su variabili locali e globali in Javascript: portata variabile e la var parola chiave
A parte quanto detto Pekka correttamente, parseInt preferisce avere un parametro radix. Dalla documentazione:
Se il parametro radix viene omesso, JavaScript presuppone quanto segue:
- Se la stringa inizia con "0x", il radix è 16 (esadecimale)
- Se il stringa inizia con "0", la radice è 8 (Ottale). Questa funzione è deprecato
- Se la stringa inizia con qualsiasi altro il valore, la radice è 10 (decimale)
Che cosa siete passando come parametro "TitleText", verificare se è davvero un int. Voglio dire [1]