본문 바로가기

개발 일기

[JavaScript] false || false로 short-circuit evaluation을 하면 어떻게 될까?

한국 블로그들을 보니 '단축 평가 값'이라고도 하던데 역시 원어의 의미가 잘 와닿는 것 같다. 

 

short-circuit evaluation은 conditional을 공부하면서 처음 접하게 되었다. 길다란 조건문을 한 줄로 퉁칠 수 있다니 꽤나 매력적인 문법에는 틀림이 없다고 생각한다. (아직 아무것도 모르지만서도...)

 

let username = '';
let defaultname;						// data type: undefined

if (username) { 
	defaultname = username;				// false일 경우 username 할당
 } else {
 	defaultname = 'Stranger';			// true일 경우 defaultname에 string 할당
 }

위가 일반적인 if else 조건문이다. 

그런데 위와 같은 조건문을

 

let username = '';
let defaultName = username || 'Stranger'

아래와 같이 두 줄로 줄일 수 있다! 어메이징

 

논리 연산자(이 경우에는 ||)는 왼쪽에서부터 오른쪽으로 실행되기 때문에 username이 true인지 boolean 값을 먼저 따진 다음, true이면 다음으로 넘어가지 않고 그대로 defaultname에 값이 할당된다. 나머지 expression(?)에 대해서 연산을 실행하지 않아서 short-circuit이라고 부르는 듯?

 

만약 username이 false일 경우 다음(논리 연산자의 오른쪽)으로 넘어가 'Stranger'가 할당되게 된다. 근데 여기서 갑자기 생긴 질문: 두 값 모두 boolean value가 false일 경우 어떻게 되는 거지?

 

false로 처리되는 값을 여러 개 넣어 봤는데, 무조건 오른쪽 값이 출력되는 것 같다. 왜지??? short-circuit evalution 자체가 TF에 중점을 두지 않고 앞 값이 false로 판명되면 다음 값 할당~ 이런 식으로 작동되는 건가? 

 

이것도 질문이 필요한 부분인 것 같다^_^ 개발자분께 질문해야지 개발자분들 진짜 넘 친절하게 가르쳐 주시는 것 같다 나도 나중에 그런 개발자가 되어야지!