developer tip

자바 스크립트 (+) 기호는 변수 합계를 제공하는 대신 연결합니다.

optionbox 2020. 10. 24. 10:01
반응형

자바 스크립트 (+) 기호는 변수 합계를 제공하는 대신 연결합니다.


이것을 사용하는 이유 : (가정 i = 1)

divID = "question-" + i+1;

내가 얻을 질문-11 이 아니라 질문-2 ?


대신 사용 :

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

이것은 매우 일반적인 문제이며 JavaScript에서만 발생하지 않습니다. 아이디어는 연결과 덧셈을 모두+ 나타낼 수 있다는 것입니다.

+ 연산자는 왼쪽에서 오른쪽으로 처리되므로 코드의 결정은 다음과 같습니다.

  • "question-" + i: "question-"은 문자열이므로 연결을 수행하여"question-1"
  • "question-1" + 1: "queston-1"은 문자열이므로 연결을 수행하여 "question-11".

"question-" + (i+1)는 다르다 :

  • (가) 이후 (i+1)괄호 안의 첫 번째 전에 그 값을 계산해야 +적용될 수있다 :
    • i숫자, 1숫자이므로 더하기를 수행하여2
  • "question-" + 2: "question-"은 문자열이므로 연결을 수행하여 "question-2".

이것을 사용할 수도 있습니다.

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

i정수로 변환 되었는지 확인하십시오 .


사용 :

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

"n"이 html 입력 필드에서 나오거나 문자열로 선언 된 경우 명시 적 변환을 사용해야합니다.

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

"n"이 정수이면 변환 할 필요가 없습니다.

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

문자열에 숫자를 연결하기 때문에 모든 것이 문자열로 취급됩니다. 숫자를 함께 추가하려면 별도로 수행하고 변수에 할당하고 다음과 같이 해당 변수를 사용해야합니다.

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

또는 다음과 같이 숫자 추가를 지정해야합니다.

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

편집하다

나는 이것을 오래 전에 추가 했어야했지만 코멘트에 따르면 이것도 작동합니다.

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

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

여기 에서 확인하십시오 . JSFiddle입니다.


Joachim Sauer의 답변 은 이와 같은 시나리오에서 작동합니다. 그러나 대괄호를 추가해도 도움이되지 않는 경우가 있습니다.

예 : '입력 요소와 정수 값의 합'을 함수의 인수로 전달합니다.

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

사용하여 작동시킬 수 있습니다. Number()

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

someFuntion(arg1 + arg2);

또는

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

someFuntion(Number(arg1) + arg2);

대괄호 추가

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

숫자를 묶는 중괄호를 사용하면 연결 대신 더하기로 처리됩니다.

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

그 이유는 연산자의 우선 순위와 +문자열을 연결하고 숫자 추가를 수행하는 데 사용되는 사실입니다 .

In your case, the concatenation of "question-" and i is happening first giving the string "question=1". Then another string concatenation with "1" giving "question-11".

You just simply need to give the interpreter a hint as to what order of prec endence you want.

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

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

Use this + operator behave as concat that's why it showing 11.


Another alternative could be using:

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

Subtracting a negative is the same as adding, and a minus cannot be used for concatenation


Care must be taken that i is an integer type of variable. In javaScript we don't specify the datatype during declaration of variables, but our initialisation can guarantee that our variable is of a specific datatype.

It is a good practice to initialize variables of declaration:

  • In case of integers, var num = 0;
  • In case of strings, var str = "";

Even if your i variable is integer, + operator can perform concatenation instead of addition.

In your problem's case, you have supposed that i = 1, in order to get 2 in addition with 1 try using (i-1+2). Use of ()-parenthesis will not be necessary.

- (minus operator) cannot be misunderstood and you will not get unexpected result/s.


Simple as easy ... every input type if not defined in HTML is considered as string. Because of this the Plus "+" operator is concatenating.

Use parseInt(i) than the value of "i" will be casted to Integer.

Than the "+" operator will work like addition.

In your case do this :-

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

One place the parentheses suggestion fails is if say both numbers are HTML input variables. Say a and b are variables and one receives their values as follows (I am no HTML expert but my son ran into this and there was no parentheses solution i.e.

  • HTML inputs were intended numerical values for variables a and b, so say the inputs were 2 and 3.
  • Following gave string concatenation outputs: a+b displayed 23; +a+b displayed 23; (a)+(b) displayed 23;
  • From suggestions above we tried successfully : Number(a)+Number(b) displayed 5; parseInt(a) + parseInt(b) displayed 5.

Thanks for the help just an FYI - was very confusing and I his Dad got yelled at 'that is was Blogger.com's fault" - no it's a feature of HTML input default combined with the 'addition' operator, when they occur together, the default left-justified interpretation of all and any input variable is that of a string, and hence the addition operator acts naturally in its dual / parallel role now as a concatenation operator since as you folks explained above it is left-justification type of interpretation protocol in Java and Java script thereafter. Very interesting fact. You folks offered up the solution, I am adding the detail for others who run into this.

참고URL : https://stackoverflow.com/questions/5961000/javascript-sign-concatenates-instead-of-giving-sum-of-variables

반응형