업데이트:

블록문

블록문 여러 문을 중괄호로 묶은 것이다.

블록문은 하나의 실행 단위이고 제어문이나 함수에서 사용하는 것이 일반적이다.

중괄호만으로 세미콜론을 붙이지 않아도 자체 종결성을 가진다.

조건문

.1️⃣ if …else 문

if (조건식1) {
	// 조건식이 참이면 이 블록문 실행
} else if (조건식2) {
	// 조건식2가 참이면 이 블록문 실행
} else {
	// 조건식1과 조건식2가 거짓이면 이 블록문 실행
} // 코드 블록 내의 문이 하나면 중괄호 생략 가능

if문을 사용할 때 괄호 안의 조건식은 불리언 값으로 평가되어야 한다.

불리언 값이 아니라면 불리언 값으로 암묵적 타입 변환이 일어난다.

대부분의 if …else문은 삼항 조건 연산자로 바꿔 쓸 수 있다.

if …else문은 값처럼 사용할 수 없기 때문에 변수에 할당할 수 없다.

2️⃣ switch 문

switch (표현식) {
	case 표현식1:
		표현식과 표현식1이 일치하면 실행되는 ;
		break;
	case 표현식2:
		표현식과 표현식2가 일치하면 실행되는 ;
	case 표현식3:
		표현식과 표현식3이 일치하면 실행되는 ;
	default:
		표현식과 일치하는 표현식이 없을  실행될 ;
}

switch 문의 표현식은 불리언 값보다는 문자열이나 숫자 값인 경우가 많다.

조건이 많고 다양한 케이스에 따라 실행할 코드 블록을 결정할 때 사용한다.

만약 break문이 없다면 switch문을 빠져나가지 않고 다음 case문으로 연이어 이동하는 특징이 있다. 이를 폴스루(fall through)라고 한다.

🧐 폴스루가 유용하게 쓰이는 경우 - 윤년인지 판별하기 예제

var year = 2000; // 2000년은 윤년으로 2월이 29일이다.
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;
  case 2:
    // 윤년 계산 알고리즘
    // 1. 년도가 4로 나누어 떨어지는 해는 윤년(2000, 2004, 2008, 2012, 2016, 2020…)
    // 2. 그 중에서 년도가 100으로 나누어 떨어지는 해는 평년(2000, 2100, 2200...)
    // 3. 그 중에서 년도가 400으로 나누어 떨어지는 해는 윤년(2000, 2400, 2800...)
    days = ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) ? 29 : 28;
    break;
  default:
    console.log('Invalid month');
}

console.log(days); // 29

반복문

반복 횟수가 명확할 때는 for문을 주로 사용하고 while문은 반복 횟수가 불명확할 때 주로 사용한다.

반복문을 대체하는 기능으로 forEach메서드, for … in문, for … of문 등이 있다. 책의 뒷부분에서 다룰 내용이니 존재를 알고만 넘어가자.

1️⃣ for 문

//구문
for (초기화식; 조건식; 증감식) {
  조건식이 참인 경우 반복 실행될 ;
}
//무한루프
for ( ;; ){ }

초기화식, 조건식, 증감식 모두 옵션이고 모두 사용하지 않을 때 무한루프가 일어난다.

2️⃣ while 문

var count = 0;

// count가 3보다 작을 때까지 코드 블록을 계속 반복 실행한다.
while (count < 3) {
  console.log(count);
  count++;
} // 0 1 2

//무한루프
while (true) {
	console.log(count);
	count++;
	
	if(count === 3) break;
}

조건문의 평가 결과가 거짓이면 코드 블록이 종료된다. while문도 조건식의 평가 결과가 불리언 값이 아니라면 불리언 값으로 암묵적 타입 변환된다.

while문을 무한루프로 만들고 싶다면 조건문을 true로 해주면 된다. 탈출하고 싶으면 if문을 이용해 코드 블록 안에 탈출 조건을 만들고 break 문으로 탈출하면 된다.

3️⃣ do …while문

var count = 0;

// count가 3보다 작을 때까지 코드 블록을 계속 반복 실행한다.
do {
  console.log(count);
  count++;
} while (count < 3); // 0 1 2

do while 문은 처음에 코드 블록이 무조건 한번 실행되고 while문을 평가한다는 점에서 while문과 차이가 있다.

break 문

반복문(for, for …in, for …of, while, do… while), switch문, 레이블 문 등의 코드 블록을 탈출하는 문이다. 만약 if 문에 break 문을 사용하면 문법 에러가 발생한다.

🧐 레이블 문이란?

식별자가 붙은 문이다. switch 문의 default문과 case문도 이에 해당한다.

한국어로 번역해보면 라벨이 붙여져 있는 문이라고 생각하면 될 것 같다.

// foo라는 식별자가 붙은 레이블 블록문
foo: {
  console.log(1);
  break foo; // foo 레이블 블록문을 탈출한다.
  console.log(2);
}

console.log('Done!');

continue 문

var string = 'Hello World.';
var count = 0;

// 문자열은 유사배열이므로 for 문으로 순회할 수 있다.
for (var i = 0; i < string.length; i++) {
  // 'l'이 아니면 현 지점에서 실행을 중단하고 반복문의 증감식으로 이동한다.
  if (string[i] !== 'l') continue;
  count++; // continue 문이 실행되면 이 문은 실행되지 않는다.
}

console.log(count); // 3

// 참고로 String.prototype.match 메소드를 사용해도 같은 동작을 한다.
console.log(string.match(/l/g).length); // 3

댓글남기기