inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바스크립트 비기너: 튼튼한 기본 만들기

7. 후치, 전치, 논리 NOT 연산자

후치 연산자

221

김민기

작성한 질문수 5

2

전치 연산자는  문장 안에서 1 증가는 그렇다 쳐도, 후치 연산자는 세미 콜론 다음에 감소한다는 것은 잘못된 설명 같습니다. 

예를 들어,

var one =  1;

console.log( one ++);

처럼 단편적으로 후치 연산자 하나만 실행 했을 때는 세미콜론 다음에 감소하는 것처럼 보일 지는 몰라도

var one =  1;

console.log( one-- + ++one );

과 같이 실행 했을  때,  후치 연산자가 문장을 수행한 후에 감소한다면 이것의 결과는 1+2가 되어 3이 되어야겠죠. 하지만 실행 결과는 2 입니다. 왜냐하면  one-- 이후에 one은 0이고 ++one에서 one은 또다시 1이 되어서 1+1 = 2 라고 생각이 드네요.

 그러니까 후치연산자도 결국 문장안에서 실행된다고 표현하시는게 맞지 않을까요? 다만 이것도 표현식을 평가한 후에 1 증가 또는 감소라고 하는 편이 맞는 것 같다고 생각합니다.  

oop javascript

답변 1

3

김영보

좋은 질문입니다. 자바스크립트 스펙에 아래와 같이 기술되어 있습니다.
When a ++ or -- token is encountered where the parser would treat it as a postfix operator, and at least one LineTerminator occurred between the preceding token and the ++ or -- token, then a semicolon is automatically inserted before the ++ or -- token.

----------
var one = 1, two = 2;
console.log(one-- + ++two);  // 결과: 4
console.log(one) // 값: 0

4가 되려면 one--를 실행하지 않고 1이어야 합니다. 또한, 3번째 줄의 console.log(one)의 값은 0입니다. console.log(one-- + ++two);를 실행할 때는 one--를 하지 않고 (1 + 3)을 한 후, 세미콜론에서 one--를 했다고도 볼 수 있습니다. 아래 코드에서 결과는 7이며 (1 + 3 + 3) 형태가 되어야 7이 될 수 있습니다. 두 개의 결과에서 one--는(은) 세미콜론을 만났을 때 실행한다고 볼 수 있습니다.
지금까지 결과로 보면 console.log(one-- + ++two);  형태는 생각한 것과 다르게 결과가 나올 수 있다는 것입니다. 코드의 가독성을 위해 사용하지 않는 것이 나을 것 같습니다.

var one = 1, two = 2, three = 3;
console.log(one-- + three-- + ++two);  // 결과: 7

2

김민기

제 질문 의도가 잘 전달되지 않은 것 같습니다. 

var one = 1;

console.log(one, one-- + ++one, one, --one);

한 번 이 경우에 대해서 생각해보죠. 

말씀하신 것 처럼 one--가 세미콜론을 만났을 때 실행한다고 볼 때,  로그의 두번째 인자는 1+2가 되어 3이 출력되어야 합니다. 

하지만 결과는 2이고 로그 세번째 인자에서 1로 출력됩니다. 

그러니까 두번째 인자에서

1 +  ( 0 ( 1-- ) →  1 ( 0++ ) )  + 1       ( 중간 괄호는 one 변수의 연산 과정 )

로 2인 것 같습니다. 따라서 후치연산자도 세미콜론을 만나야 실행되는 것이 아닌, 문장 중간에 실행된다 라고 표현하는 것이 더 맞다고 생각듭니다. 

강의 잘 듣고 있습니다. 

프론트엔드 부트캠프 가기 전, 짧은 감사 인사드립니다!

2

109

2

섹션10 3. Object 프리미티브 값 구하기에서 질문있습니다.

1

148

2

섹션3의 1강 연산자, 표현식 강의에서 표현식 질문이 있습니다.

0

140

2

섹션 1. 6번째 강의 질문입니다.

1

247

1

선생님 Objcet 질문 있습니다.

0

299

2

forEach문을 활용한 코딩시간 풀이

0

616

1

sort 코딩 시간 풀이

0

292

1

코딩 시간 풀이 올려봅니다.

0

229

1

인덱스 코딩시간 문제풀이

0

381

1

for문 코딩 시간 답제출

0

306

1

3:39 sort에 들어가서 one,two 파라미터질문입니다.

0

194

0

퀴즈 질문 및 정답

0

356

1

오브젝트

0

283

1

인스턴스 목적

1

239

1

[코딩시간 01] 3항 연산자로 작성했을 때, 각 값..?

0

269

1

Undefined === Null; // true???

0

194

1

indexOf의 파라미터에 음수를 작성 했을때에 대한 질문입니다.

0

1031

5

length 값 변환 논리에 대한 질문입니다.

0

211

1

상수 변수 선언에 대해

0

235

1

코딩 시간 (for문) 풀이

0

255

1

Object vs object

1

498

1

코딩 시간 풀이입니다.

0

195

1

log(add(1, 2, 3, 4));

0

177

1

코딩시간 답 제출

0

196

1