자바 스크립트 (+) 기호는 변수 합계를 제공하는 대신 연결합니다.
이것을 사용하는 이유 : (가정 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);
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.
'developer tip' 카테고리의 다른 글
정규식과 슬래시 일치 (0) | 2020.10.24 |
---|---|
LaTeX를 UTF8로 컴파일하려면 어떻게해야합니까? (0) | 2020.10.24 |
스토리 보드 팝 오버를 닫는 방법 (0) | 2020.10.24 |
SQL-IF EXISTS UPDATE ELSE INSERT INTO (0) | 2020.10.23 |
ListView 용 Android 사용자 지정 행 항목 (0) | 2020.10.23 |