Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[JavaScript] 변수값 설정 시 default 사용 (short-circuit 트릭) Computer & Program

JavaScript는 short-circuit을 이용하면 변수에 값을 할당할 때 유용하게 사용할 수 있다. (변수에 값이 할당되어 있는지 체크해서 없으면 default 설정하는 경우 등)

var a = undefined;
var b = 3;
var c = a || b;
if(a) console.log('AA') // 출력 안 됨
if(b) console.log('BB'); // BB
console.log(c); // 3
a = 2;
c = a || b;
console.log(c); // 2

// 동일한 코드 - 좀 길어지니 OR연산자(||)를 써서 한 줄로 줄임
if(a)
    c = a;
else
    c = b;


JavaScript의 논리값 테스트와 논리 연산자(||)를 이용한 일종의 트릭인데, JavaScript 환경에서는 많이 사용되는듯 하다.

1. JavaScript에서 undefined는 논리 연산에서 false를 반환한다. 그리고 0이 아닌 숫자나 empty string이 아닌 문자열 등은 true를 반환한다. 때문에 'AA'는 출력되지 않고, 'BB'만 출력되는 것이다. (맨 아래 샘플 참조)

2. 일반적인 언어들은 연산을 처리할 때 굳이 확인하지 않아도 되는 부분을 건너뛰기 위해 short-circuit을 지원한다. 언어 마다 지원하는 연사자가 다르다. OR 논리 연산자(||)는 연산자 왼쪽이 이미 참인 경우 오른쪽이 참이든 거짓이든 무조건 참이기 때문에 (JavaScript의 경우) 오른쪽의 비교를 수행하지 않는다. 때문에 c = a || b; 부분은 a가 논리연산에서 true를 반환하는 값이 들어 있는 경우 , c에는 a의 값이 들어가게 된다. 만일 a가 true가 아니면 b를 사용한다.


express.js로 웹서버 샘플 코드를 생성하면, 아래와 같은 내용이 포함된 것을 볼 수 있다. 웹서버의 listen 포트를 process.env.PORT에 설정하지 않는 경우 3000번 포트를 default로 사용하게 된다. (process.env는 환경 변수에 설정된 값을 읽어온다.)

app.set('port', process.env.PORT || 3000);


이런 트릭을 이용해서 JavaScript에서는 OR 연산자 오른쪽에 default 값을 배치해서 코딩하는 경우가 좀 많은 것 같다. 아주 일반적으로 사용되고 있다.


문자열 등 논리 연산 결과 샘플
if('') console.log('empty string'); // 출력 안 됨
if(undefined) console.log('undefined'); // 출력 안 됨
if(null) console.log('null'); // 출력 안 됨
if('something') console.log('not empty string'); // 출력 됨
if(1) console.log(1); // 1
if(0) console.log(0); // 출력 안 됨
if(-1) console.log(-1); // -1
if(1.5) console.log(1.5); // 1.5


핑백

덧글

댓글 입력 영역

Google AdSense (text/image)