제어문 (control flow statement )은 조건에 따라 코드 블록을 실행하거나 반복 실행할 때 사용된다.
코드는 일반적으로 위에서 아래 방향으로 순차적으로 실행된다. 하지만 제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어할 수 있다.
❗ 블록문
블록문 ( block statement / compound statement ) 은 0개 이상의 중괄호를 묶은 것으로 '코드 블록', '블록'이라고 부르며, 세미클록을 붙이지 않는다.
//코드 블록
{
var foo = 10;
}
❗ 조건문
조건문 ( conditional statement ) 는 주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정한다.
조건문은 if..else
문과 switch
문으로 나뉜다.
❓ if ... else 문
if (조건식1) {
조건식1이 참일 경우 실행
}else if(조건식2){
조건식1이 거짓이고 2가 참일 경우 실행
}else{
모든 조건식이 거짓일 경우 실행
}
if..else
문은 주어진 조건식의 결과에 따라(true, false) 실행할 코드 블럭이 달라진다.
대부분의 if..else
은 삼항 조건 연산자로 바꿔서 쓸 수 있다.
var x = 2;
var result;
//조건문
if (x % 2){ // 2 % 2 = 0 => false
result = '짝수';
}else{
result = '홀수';
}
//삼항 조건 연산자
result = (x % 2)?'짝수':'홀수';
간단한 if..else
문은 삼항 조건 연산자로 대체하여 사용하는 것이 가독성이 좋지만, 조건이 많아질수록 if..else
문을 사용하는 것이 가독성이 더 좋다.
❓ switch 문
switch (표현식){
case 표현식1:
실행문;
break;
case 표현식2:
실행문;
break;
default:
실행문;
}
switch
문은 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 실행 흐름을 옮기며, 값과 일치하는 case가 없을 경우 default 문으로 이동한다.
var x = 2
var result
switch (x % 2) {
case 0:
result = '짝수'
break
case 1:
result = '홀수'
break
default:
result = '숫자가 아님'
}
case 문은 여러번 사용하여 표현식의 값을 추가할 수 있다.
case 문이 끝나고 break 으로 조건식을 끝내지 않는다면 fall through
가 발생한다.
fall through
: 값과 일치하는 case 문으로 이동하였지만 switch
문을 탈출하지 않아, 모든 case의 값이 재할당된 후 결국 default의 값이 재할당된 상태.
fall through
가 일어나면 결국 result
에는 '숫자가 아님'
이 담길 것이다.
❗ 반복문
반복문 ( loop statement ) 은 조건식의 평가 결과가 true
경우 코드 블록을 실행하며, false
일 때까지 반복 실행한다.
반복문은 for
, while
, do ... while
문으로 나뉜다.
❓ for 문
for (변수 선언 또는 할당; 조건식; 증감식){
true일 경우 반복 실행할 문;
}
for (var i=0; i <2; i++){
console.log(i);
}
// 0 , 1
변수로 선언한 i
가 0으로 시작하여 1씩 증가되고( i++), 2 이상의 값이 재할당될 때까지 ( i<2) console.log(i);
를 실행한다.
변수 선언문, 조건식, 증감식은 옵션이기 때문에 생략할 수 있다.
for(;;){...}
=> 무한 루프
for
문은 여러 for
문을 중첩하여 사용할 수 있다.
❓ while 문
while(조건식){
조건식이 true 일 경우 반복 실행할 문;
}
var i = 0;
while(i<2){
console.log(i);
i++;
}
// 0 , 1
위 for 문 예제와 동일한 값을 갖는다.
for
은 정확한 반복 횟수가 정해지고 알고 있을 때 사용, while
은 반복 횟수를 모른체 조건문으로 사용
조건식 부분은 true
/ false
로 사용한다.
while(true){반복문}
=> 무한루프
❓ do ... while 문
do {
반복 실행될 문
} while (조건식)
var i = 0
do {
console.log('안녕!')
i++
} while (i < 0)
// 안녕!
do ... while
문은 조건에 만족하지 않더라도 do에 있는 실행문을 모조건 한 번 실행한다.
❗ break
레이블 문 , 반복문 , switch 문에서 사용 가능하며, 해당 코드 블록을 탈출한다.
for (var i = 0; i < 2; i++) {
console.log(i)
break
} // 0
break 가 없었다면 0 , 1이 나왔어야 했지만, 첫 번째 실행에서 console.log(i);
을 만난 후 break를 통해 for문을 빠져나와 종료되었다.
❗ continue
반복문의 코드 블록 실행에서 현 지점을 중단하고, 다음 실행 흐름으로 이동한다.
for (var i = 0; i < 5; i++) {
if (i === 1) {
continue
}
console.log(i)
} // 0 , 2 , 3, 4
i 가 1을 할당 받는 실행 흐름에서 continue 문을 만나, console.log(i);
를 거치지 않고 다음 실행 흐름인 i = 2 로 넘어간다.