JavaScript의 ++ someVariable 및 someVariable ++


135

JavaScript에서는 ++연산자를 사전 증가 ( pre-increment ) 또는 변수 이름 ( post-increment ) 뒤에 사용할 수 있습니다 . 변수를 증가시키는 이러한 방법의 차이점은 무엇입니까?



나는 어제 C / C ++의 잘못된 가정에 대한 질문에 대한 응답 을 읽는 것에 대해 생각하고있었습니다 . 모든 경우에 자바 스크립트가 이런 식으로 작동한다고 보장 할 수 있습니까? 아니면 더 복잡한 명령문 내에서 증가 명령문을 사용하는 것이 좋지 않다고 생각합니까?
palswim

이전 의견 은 실제로 2010 년에 게시 한 답변 (답변이 아닌 답변) 의 사본입니다 . 답변을 삭제했지만 Jon Skeet 은 다음 과 같이 대답 했습니다. "ECMA-262를 보면 꽤 잘 지정된 것 같습니다."
palswim

답변:


242

다른 언어와 동일

  • ++x (사전 증가)는 "변수 증가; 표현식의 값은 최종 값"을 의미합니다.
  • x++ (증분 후)는 "원래 값을 기억하고 변수를 증가시킵니다. 표현식의 값은 원래 값입니다"를 의미합니다

이제 독립형 명령문으로 사용될 때 동일한 의미를 갖습니다.

x++;
++x;

다른 곳에서 표현식의 값을 사용할 때 차이가납니다. 예를 들면 다음과 같습니다.

x = 0;
y = array[x++]; // This will get array[0]

x = 0;
y = array[++x]; // This will get array[1]

13
저주, 나는 실질적인 jsfiddle 답변을 중단하지 않았다면 거의 당신을 대답으로 이겼습니다. ;-)
Chris

2
+ 1대신에 이것을 사용하면 ++어떻게 보일까요? 숫자를 추가 할 때 전후에 증가시키는 방법이 있습니까?
Keavon

이 작업을 수행하면 왜 const r1 = (x ++) + (x ++); 예제에 따라 예상 결과를 생성하지 않습니다.
Jean Jimenez

1
@JeanJimenez : 글쎄 그것은 내가 기대 하는 결과를 낳는다 . 예를 들어, x10으로 시작하면 값 r1은 21이며 10 + 11입니다. 첫 번째 x++표현식 의 값 은 10이고 x11로 증가합니다. 두 번째 x++표현식 의 값 은 11이고 x12로 증가합니다.
Jon Skeet

@JonSkeet에게, 초고속 응답에 감사드립니다. JavaScript를 처음 접했을 때 혼란스럽고 왜 혼란스러워하는지에 대한 혼란이 있습니다.
Jean Jimenez

43
  • ++x 값을 증가시킨 다음 평가하고 저장합니다.
  • x++ 값을 평가 한 후 증가시켜 저장합니다.
var n = 0, m = 0;

alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */

++x변수를 읽고 수정 한 다음 평가 및 저장하기 때문에 가능한 경우 사용하면 약간의 성능 이점이 있습니다. x++값을 읽고 평가하고 수정 한 후 저장 하는 연산자 와 비교하십시오 .


7

당신이 그들을 독립형으로 사용한다면 내가 이해하는 것처럼 그들은 같은 일을합니다. 결과를 표현식으로 출력하려고하면 결과가 다를 수 있습니다. 차이점을 보려면 alert (++ i)와 비교하여 alert (i ++)을 시도하십시오. i ++는 추가하기 전에 i로 평가하고 ++ i는 평가하기 전에 추가를 수행합니다.

예는 http://jsfiddle.net/xaDC4/ 를 참조하십시오 .


2
var a = 1;
var b = ++a;
alert('a:' + a + ';b:' + b); //a:2;b:2

var c = 1;
var d = c++;
alert('c:' + c + ';d:' + d); //c:2;d:1

jsfiddle


0
var x = 0, y = 0;

//post-increment: i++ returns value then adds one to it
console.log('x++ will log: ', x++); //0
console.log('x after x++ : ', x);    //1

//pre-increment: adds one to the value, then returns it
console.log('++y will log: ', ++y); //1
console.log('y after ++y : ', y);   //1

0

증가 후 및 증가 후 이해에 대한 설명이 있습니다. 여기에 넣겠습니다.

에 할당 0할 수 있습니다x

let x = 0;

증분 후 시작

console.log(x++); // Outputs 0

왜?

x++표현을 세분화 하자

x = x;
x = x + 1;

첫 번째 문장 x0

나중에 x어디에서나 변수 를 사용 하면 두 번째 문이 실행됩니다.

두 번째 명령문은이 x + 1표현식 의 값을 리턴합니다.(0 + 1) = 1

x이 상태에서 의 가치를 명심하십시오.1

이제 사전 증분부터 시작하겠습니다

console.log(++x); // Outputs 2

왜?

++x표현을 세분화 하자

x = x + 1;
x = x;

첫 번째 명령문은이 x + 1표현식 의 값을 리턴합니다.(1 + 1) = 2

두 번째 문은의 값 반환 x되는 2그래서 x = 2따라서 반환2

이것이 증가 후 및 증가 후가 무엇인지 이해하는 데 도움이되기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.