제어문은 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다.
: 0개 이상의 문을 중괄호{ }로 묶은 것으로, 코드 블록 또는 블록이라고 부른다.
: 주어진 조건식(conditional expression)의 평가 결과에 따라 코드 블록(블록문)의 실행을 결정한다.
조건식은 불리언 값으로 평가될 수 있는 표현식이다.
if (조건식1) {
// 조건식1이 참이면 이 코드 블록이 실행된다.
} else if (조건식2) {
// 조건식2가 참이면 이 코드 블록이 실행된다.
} else {
// 조건식1과 조건식2가 모두 거짓이면 이 코드 블록이 실행된다.
}
var num = 2;
var kind;
if (num > 0) kind="양수";
else if (num < 0) kind="음수";
else kind="영";
var x = 2;
// 0은 false로 암묵적 강제 변환된다.
var result = x % 2 ? '홀수' : '짝수';
var num = 2;
// 경우의 수가 세 가지인 경우
var kind = num ? (num > 0 ? '양수' : '음수') : '영';
switch (표현식) {
case 표현식1:
switch 문의 표현식과 표현식1이 일치하면 실행될 문;
break;
case 표현식2:
switch 문의 표현식과 표현식2가 일치하면 실행될 문;
break;
default:
switch 문의 표현식과 일치하는 case 문이 없을 때 실행될 문;
}
var month = 11;
var monthName;
switch (month) {
case 1: monthName = 'January';
case 2: monthName = 'February';
...
case 11: monthName = 'November';
case 12: monthName = 'December';
default: monthName = 'Invalid month';
}
console.log(monthName); // Invalid month
폴스루(fall through): 문을 실행한 후 switch 문을 탈출하지 않고 switch 문이 끝날 때까지 이후의 모든 case 문과 default 문을 실행하는 것
=> break 문을 사용하여 코드 블록에서 탈출해야 한다.
switch (month) {
case 1: monthName = 'January';
break;
case 2: monthName = 'February';
break;
...
case 11: monthName = 'November';
break;
case 12: monthName = 'December';
break;
default: monthName = 'Invalid month';
}
console.log(monthName); // November
var month = 2;
var days = 0;
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
...
: 조건식의 평가 결과가 참인 경우 코드 블록을 실행한다. 그 후 조건식을 다시 평가하여 여전히 참인 경우 코드 블록을 다시 실행한다. 조건식이 거짓일 때까지 반복한다.
: 조건식이 거짓으로 평가될 때까지 코드 블록을 반복 실행한다.
for ( 변수 선언문 또는 할당문; 조건식; 증감식) {
조건이 참인 경우 반복 실행될 문;
}
for ( let i = 0; i < 2; i++) {
console.log(i);
}
: for 문 내에 for 문을 중첩해 사용
for ( let i = 1; i <= 6; i++ ) {
for ( let j = 1; j <= 6; j++ ) {
if (i + j === 6) console.log(`[${i}, ${j}]`);
}
}
: 주어진 조건식의 평가 결과가 참이면 코드 블록을 계속해서 반복 실행한다. 평가 결과가 거짓이 되면 종료한다.
var count = 0; // 변수 선언,할당
while (count < 3) { // 조건식
console.log(count); // 0 1 2
count++; // 증감식
}
var count = 0;
while (true) {
console.log(count);
count++;
if (count === 3) break;
} // 0 1 2
: 코드 블록을 먼저 실행하고 조건식을 평가한다. 따라서 코드 블록은 무조건 한 번 이상 실행된다.
var count = 0;
do {
console.log(count); // 0 1 2
count++;
} while (count < 3);
// count 가 3보다 작을 동안 코드 블록을 계속 반복 실행한다.
forEach 메서드, 객체의 프로퍼티를 열거하는 for ... in 문, 이터러블을 순회하는 for ... of 문
: break 문은 레이블 문, 반복문(for, for...in, for...of, while, do...while), 또는 switch 문의 코드 블록을 탈출한다.
// foo 라는 식별자가 붙은 레이블 블록문
foo: {
console.log(1);
break foo; // foo 레이블 블록문을 탈출한다.
console.log(2);
}
outer: for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (i + j === 3) break outer; // outer 식별자가 붙은 레이블 for 문을 탈출한다.
console.log(`inner [${i}, ${j}]`);
}
}
: 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다. break 문처럼 반복문을 탈출하지는 않는다.
var string = 'Hello World.';
var search = 'l';
var count = 0;
// 문자열은 유사 배열이므로 for 문으로 순회할 수 있다.
for (var i = 0; i < string.length; i++) {
if (string[i] !== search) continue; // 조건 만족시 현 지점에서 실행을 중단하고 반복문의 증감식으로 이동한다.
count++; // continue 문이 실행되면 이 문은 실행되지 않는다.
}
===
// 동일하게 동작
for (var i = 0; i < string.length; i++) {
if (string[i] === search) count++;
}