Il segno (+) di Javascript concatena anziché dare la sum delle variabili

Perché quando lo uso: (assumendo i = 1 )

 divID = "question-" + i+1; 

Ottengo la domanda 11 e non la domanda 2 ?

Usa questo invece:

 var divID = "question-" + (i+1) 

È un problema abbastanza comune e non si verifica solo in JavaScript. L’idea è che + possa rappresentare sia la concatenazione che l’aggiunta.

Dato che l’operatore + verrà gestito da sinistra a destra, le decisioni nel tuo codice sono simili a questo:

  • "question-" + i : poiché "question-" è una stringa, faremo la concatenazione, risultante in "question-1"
  • "question-1" + 1 : poiché "queston-1" è una stringa, faremo la concatenazione, risultante in "question-11" .

Con "question-" + (i+1) è diverso:

  • poiché (i+1) è tra parentesi, il suo valore deve essere calcolato prima che il primo + possa essere applicato:
    • i sono numerico, 1 è numerico, quindi faremo l’aggiunta, risultando in 2
  • "question-" + 2 : poiché "question-" è una stringa, faremo la concatenazione, risultante in "question-2" .

Puoi anche usare questo

 divID = "question-" + (i*1+1); 

per essere sicuro di essere convertito in numero intero.

Usare solo:

 divID = "question-" + parseInt(i) + 1; 

Quando “n” deriva dal campo di input html o è dichiarato come stringa, è necessario utilizzare la conversione esplicita.

 var n = "1"; //type is string var frstCol = 5; lstCol = frstCol + parseInt(n); 

Se “n” è intero, non è necessaria la conversione.

 n = 1; //type is int var frstCol = 5, lstCol = frstCol + n; 

Dato che si concatenano numeri su una stringa, l’intera cosa viene trattata come una stringa. Quando vuoi aggiungere numeri, devi farlo separatamente e assegnarlo a una var e usare var, come questo:

 i = i + 1; divID = "question-" + i; 

O è necessario specificare l’aggiunta del numero in questo modo:

 divID = "question-" + Number(i+1); 

MODIFICARE

Avrei dovuto aggiungere questo molto tempo fa, ma sulla base dei commenti, questo funziona anche:

 divID = "question-" + (i+1); 
 divID = "question-" + parseInt(i+1,10); 

controllalo qui , è un JSFiddle

La risposta di Joachim Sauer funzionerà in scenari come questo. Ma ci sono alcuni casi in cui l’aggiunta di parentesi non aiuta.

Ad esempio: stai passando ‘sum di valore di un elemento di input e un intero’ come argomento a una funzione.

 arg1 = $("#elemId").val(); // value is treated as string arg2 = 1; someFuntion(arg1 + arg2); // and so the values are merged here someFuntion((arg1 + arg2)); // and here 

Puoi farlo funzionare usando Number()

 arg1 = Number($("#elemId").val()); arg2 = 1; someFuntion(arg1 + arg2); 

o

 arg1 = $("#elemId").val(); arg2 = 1; someFuntion(Number(arg1) + arg2); 

Aggiungi parentesi

 divID = "question-" + (i+1); 

l’uso di parentesi graffe che circondano i numeri verrà considerato come aggiunta anziché concat.

 divID = "question-" + (i+1) 

La ragione per cui si ottiene è l’ordine di precedenza degli operatori e il fatto che + sia usato sia per concatenare le stringhe sia per eseguire l’aggiunta numerica.

Nel tuo caso, la concatenazione di “domanda-” e i sta succedendo prima dando la stringa “domanda = 1”. Quindi un’altra concatenazione di stringhe con “1” che dà “domanda-11”.

Devi semplicemente dare all’interprete un suggerimento su quale ordine di precence vuoi.

 divID = "question-" + (i+1); 
 var divID = "question-" + (parseInt(i)+1); 

Utilizzare questo operatore + comporta come concat , ecco perché mostra 11.

Semplice come facile … ogni tipo di input se non definito in HTML è considerato come una stringa. Per questo motivo, l’operatore Plus “+” concatena.

Usa parseInt (i) che il valore di “i” sarà castato in numero intero.

L’operatore “+” funzionerà come addizione.

Nel tuo caso fai questo: –

 divID = "question-" + parseInt(i)+1; 

Un punto in cui il suggerimento delle parentesi non riesce è se si dice che entrambi i numeri sono variabili di input HTML. Supponiamo che a e b siano variabili e che uno riceva i loro valori come segue (non sono un esperto di HTML ma mio figlio si è imbattuto in questo e non c’era alcuna soluzione per le parentesi, ad esempio

  • Gli input HTML erano intesi valori numerici per le variabili a e b, quindi dicono che gli input erano 2 e 3.
  • In seguito ha dato gli output di concatenazione di stringhe: a + b visualizzato 23; + a + b visualizzato 23; (a) + (b) visualizzato 23;
  • Dai suggerimenti sopra abbiamo provato con successo: Numero (a) + Numero (b) visualizzato 5; parseInt (a) + parseInt (b) visualizzato 5.

Grazie per l’aiuto solo una FYI – è stato molto confuso e io il suo papà ha urlato “è colpa di Blogger.com” – no è una caratteristica del default dell’ingresso HTML combinato con l’operatore “addizione”, quando si verificano insieme, interpretazione di default a sinistra di tutti e qualsiasi variabile di input è quella di una stringa, e quindi l’operatore di addizione agisce naturalmente nel suo ruolo doppio / parallelo ora come operatore di concatenazione dato che come spiegato sopra è un tipo di giustificazione a sinistra del protocollo di interpretazione in Java e Java script in seguito. Fatto molto interessante. Voi avete offerto la soluzione, sto aggiungendo i dettagli per gli altri che vi si imbattono.