
조건에 따라 코드 블록을 실행하는 조건문과 반복 실행을 위한 반복문으로 이루어짐
일반적으로 코드는 위에서 아래 방향으로 순차적으로 실행되지만,
제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어 가능
0개 이상의 문을 중괄호로 묶은 것
코드 블록 또는 블록이라고 부름
자바스크립트는 블록문을 하나의 실행 단위로 취급
단독으로 사용 가능하나, 제어문이나 함수 정의 시 사용하는 것이 일반적
문의 끝에는 세미콜론을 붙이는 것이 일반적이지만, 블록문의 끝에는 세미콜론을 붙이지 않음
조건식(불리언 값으로 평가될 수 있는 표현식)의 평가 결과에 따라 코드 블록의 실행을 결정
자바스크립트는 if...else 문과 switch문 두 가지 조건문을 제공
if...else문 (if...else statement)
주어진 조건식의 평가 결과인 논리적 참/거짓에 따라 실행 코드 결정
조건식의 평가 결과가 true일 경우 if문의 코드 블록이, false일 경우 else문의 코드 블록이 실행됨
if문의 조건식은 불리언 값으로 평가되어야 하며, if문의 조건식이 불리언 값이 아닌 값으로 평가되면
자바스크립트 엔진에 의해 암묵적으로 불리언 값으로 강제 변환되어 실행할 코드 블록을 결정
조건식을 추가하여 실행될 코드 블록을 늘리고 싶으면 else if문을 사용
else if문과 else문은 옵션이므로 사용하지 않아도 무방
else if문은 if문이 존재해야만 사용 가능
if문과 else문은 두 번 이상 사용 불가능하지만, else if문은 여러 번 사용 가능
코드 블록 내 문이 하나 뿐이라면 중괄호 생략 가능
조건에 따라 단순히 값을 결정하여 할당하는 경우에는 삼항 조건 연산자를,
조건에 따라 실행해야 할 내용이 복잡하여 여러 줄의 문이 필요한 경우에는 if...else 문을 사용
switch문 (switch statement)
주어진 조건식을 평가하여 그 값과 일치하는 표현식을 갖는 case문으로 실행 흐름을 옮김
표현식과 일치하는 case문이 없다면 실행 순서는 default로 이동되며, default는 선택 사항이므로 사용하지 않아도 무방
if...else 문의 조건식은 불리언 값으로 평가되어야 하지만 switch문의 표현식은 불리언 값 보다는 문자열이나 숫자값의 경우가 많음
조건식의 평가 결과가 참인 경우 코드 블록 실행
그 후 조건식을 다시 평가하여 여전히 참인 경우에 다시 실행, 조건식이 거짓일 때 실행 중단
자바스크립트는 for문, while문, do...while문을 제공
for문 (for statement)
조건식이 거짓으로 평가될 때까지 코드 블록을 반복 실행
for문의 변수 선언문은 반복을 의미하는 iteration의 i를 사용하는 것이 일반적
for문의 변수 선언문, 조건식, 증감식은 모두 옵션이므로 반드시 사용할 필요는 없음
어떤 식도 사용하지 않으면 무한 루프가 됨
for문 내에 for문을 중첩하여 사용 가능 함 (중첩 for문)
while문 (while statement)
주어진 조건식의 평가 결과가 참이면 코드 블록을 계속해서 반복 실행
for문은 반복 횟수가 명확할 때 사용한다면, while문은 반복 횟수가 불명확할 때 주로 사용
조건문의 평가 결과가 거짓이 되면 코드 블록을 실행하지 않고 종료
조건식의 평가 결과가 불리언 값이 아니면 강제로 불리언 값으로 변환하여 논리적 참/거짓을 구별
조건식의 평가 결과가 언제나 참이면 무한 루프
무한 루프에서 탈출하기 위해서는 코드 블록 내에 if문으로 탈출 조건을 만들고 break문으로 코드 블록을 탈출
do...while문 (do...while statement)
코드 블록을 먼저 실행하고 조건식을 평가
따라서 코드 블록을 무조건 한 번 이상 실행
조건식의 평가 결과와 상관 없이 무조건 한 번은 실행해야 하는 경우 주로 사용
레이블문, 반복문(for, for...in, for...of, while, do...while) 또는 switch문의 코드 블록을 탈출하는데 사용
레이블문, 반복문, switch문 외에 break문을 사용하면 SyntaxError가 발생
반복문을 더이상 진행하지 않아도 될 때, 불필요한 반복을 회피할 수 있어 유용함
반복문의 코드 블록 실행을 현 시점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동
break문처럼 반복문을 탈출하지 않음