제어문(control flow statement)은 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다. 제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어할 수 있다. 코드는 일반적으로 위에서 아래로 순차적으로 진행되지만 제어문은 코드의 흐름을 제어해 가독성을 해치키도 한다. 이는 추후 고차함수를 통해 해결할 수 있다.
블록문(block statement/compound statement)은 0개 이상의 문을 중괄호'{}'로 묶은 것으로, 코드 블록 또는 블록이라고 부른다. 자바스크립트는 블록문을 하나의 실행 단위로 취업한다. 블록문의 끝에는 세미콜론을 붙이지 않는다.
조건문(conditional statement)은 주어진 조건식(condition expression)의 평가 결과에 따라 코드 블록(블록문)의 실행을 결정한다. 조건식은 불리언 값으로 평가될 수 있는 식이다.
if ... else문은 주어진 저건식의 평가 결과, 논리적 참 거짓에 따라 실행할 코드블록을 결정한다. 평가 결과가 true이면 if 아니면 그 다음의 else if나 else문의 코드가 실행된다. 이러한 if ... else문은 삼항 조건 연산자로도 바꿔 쓸 수 있다.
if (num > 0) kind = '양수'
else if (num < 0) kind = '음수'
else kine = '0';
// 삼항연산자 변환
kind = num > 0 ? '양수' : (num < 0 ? '음수' : '0');
switch문은 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 실행 흐름을 옮긴다. case문은 상황을 의미하는 표현식을 지정하고 콜론으로 마친다. 일치하는 case 문이 없다면 default문을 실행시키나, default문은 선택사항이다.
let num = 3;
let name;
switch (num) {
case 1: name = 'one';
break;
case 2: name = 'two';
break;
case 3: name = 'three';
break;
default: name = 'other';
}
console.log(name); //three
break문을 통해 해당 case일때 switch문을 빠져나가도록 해준다. 그렇지 않으면 항상 other이 출력되게 된다.
반복문(loop statement)은 조건식의 평가 결과가 참인 경우 코드 블록을 실행한다. 그 후 조건식을 다시 평가하여 여전히 참이면 코드 블록을 다시 실행하며 조건식이 거짓일 때까지 반복한다.
for (let i = 0; i < 2; i++) // 변수 선언; 조건식; 증감식 / 조건식이 참이면 코드블록 실행
console.log(i);
// 1 2
let i = 0;
while (i < 2) //조건식이 참이면 코드블록 실행
console.log(i++);
// 1 2
위와 같이 반복문을 사용할 수 있으며 내부에 중첩하여 사용할 수도 있다. 조건식에 아무것도 없거나 항상 true인 경우 무한루프가 진행된다. 내부에서 break문이나 continue문을 사용하여 제어할 수도 있다.
break문은 레이블 문, 반복문 등의 코드 블록을 탈출한다.
//foo 라는 식별자가 붙은 레이블 블록문
foo: for (let i = 0; i < 100; i++) {
for (let j = 100; j > 0; j--)
if (i === j)
break foo; // i와 j가 같아지면 foo 식별자가 붙은 for문 탈출 (바깥 for문 탈출)
}
continue문은 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.
for (let i = 0; i < 100; i++)
{
if (i % 2 === 0)
continue; //짝수이면 continue에 의해 console.log를 실행시키지 않고 for문의 증감식으로 올라간다.
console.log(i); // 홀수만 출력시키게 된다.
}