O sinal de Javascript (+) concatena em vez de dar sum de variables

Por que quando eu uso isso: (supondo que i = 1 )

 divID = "question-" + i+1; 

Eu recebo a pergunta 11 e não a pergunta 2 ?

Use isso em vez disso:

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

É um problema bastante comum e não acontece apenas em JavaScript. A ideia é que + pode representar tanto a concatenação quanto a adição.

Como o operador + será tratado da esquerda para a direita, as decisões em seu código se parecem com isso:

  • "question-" + i : como "question-" é uma string, faremos a concatenação, resultando em "question-1"
  • "question-1" + 1 : como "queston-1" é uma string, faremos a concatenação, resultando em "question-11" .

Com "question-" + (i+1) é diferente:

  • já que o (i+1) está entre parênteses, seu valor deve ser calculado antes que o primeiro + possa ser aplicado:
    • i é numérico, 1 é numérico, então faremos a adição, resultando em 2
  • "question-" + 2 : como "question-" é uma string, faremos a concatenação, resultando em "question-2" .

Você também pode usar este

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

para ter certeza de que i é convertido em inteiro.

Usarem apenas:

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

Quando “n” vem do campo de input html ou é declarado como string, você precisa usar conversão explícita.

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

Se “n” é inteiro, não precisa de conversão.

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

Como você está concatenando números para uma string, a coisa toda é tratada como uma string. Quando você quiser adicionar números juntos, você precisa fazê-lo separadamente e atribuí-lo a um var e usar esse var, como este:

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

Ou você precisa especificar a adição de números assim:

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

EDITAR

Eu deveria ter adicionado isso há muito tempo, mas com base nos comentários, isso também funciona:

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

verifique aqui , é um JSFiddle

A resposta de Joachim Sauer irá funcionar em cenários como este. Mas há alguns casos em que a adição de colchetes não ajuda.

Por exemplo: Você está passando a ‘sum do valor de um elemento de input e um inteiro’ como um argumento para uma function.

 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 

Você pode fazê-lo funcionar usando Number()

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

ou

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

Adicionar colchetes

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

usar chaves em torno dos números será tratado como adição em vez de concat.

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

O motivo pelo qual você obtém isso é a ordem de precedência dos operadores e o fato de que + é usado para concatenar cadeias de caracteres, bem como para executar uma adição numérica.

No seu caso, a concatenação de “question-” e i está acontecendo primeiro, dando a string “question = 1”. Em seguida, outra concatenação de strings com “1” dando “question-11”.

Você simplesmente precisa dar ao intérprete uma pista sobre qual ordem de pré-dependência você deseja.

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

Use este operador + se comportar como concat por isso ele mostra 11.

Simples como fácil … todo tipo de input, se não definido em HTML, é considerado string. Por causa disso, o operador “+” está concatenando.

Use parseInt (i) que o valor de “i” será convertido em Integer.

Do que o operador “+” funcionará como adição.

No seu caso, faça o seguinte:

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

Um lugar em que a sugestão de parênteses falha é se os dois números forem variables ​​de input HTML. Diga aeb são variables ​​e um recebe seus valores da seguinte forma (Eu não sou especialista em HTML, mas meu filho correu para isso e não havia solução parênteses ou seja,

  • Entradas HTML eram valores numéricos para as variables ​​a e b, portanto, as inputs eram 2 e 3.
  • A seguir deram saídas de concatenação de string: a + b exibiu 23; + a + b exibido 23; (a) + (b) exibido 23;
  • Das sugestões acima nós tentamos com sucesso: Número (a) + Número (b) exibido 5; parseInt (a) + parseInt (b) exibido 5.

Obrigado pela ajuda apenas um FYI – foi muito confuso e eu seu pai foi gritado “que é culpa do Blogger.com” – não é uma característica do padrão de input HTML combinado com o operador ‘adição’, quando eles ocorrem juntos, o A interpretação padrão da esquerda justificada de toda e qualquer variável de input é a de uma cadeia e, portanto, o operador de adição atua naturalmente em sua function dual / paralela agora como um operador de concatenação, como você explicou acima, é um tipo de protocolo de interpretação em Java e Java script depois disso.Fato muito interessante.Suas pessoas ofereceram a solução, estou adicionando os detalhes para os outros que se deparam com isso.