[모던 자바스크립트 Deep Dive] 08장 제어문
▶️ 목차
ch.08 제어문
👀 읽은 내용 정리
제어문
조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용.
블록문(Block statement)
0개 이상의 문을 중괄호로 묶은 것. 코드 블럭, 블럭이라고 함.
자바스크립트는 블록문을 하나의 실행 단위로 취급
블록문은 자체 종결성을 갖기 때문에 블록문의 끝에는 세미콜론 생략한다.
조건문
주어진 조건식의 평가 결과에 따라 코드 블록(블록문)의 실행을 결정. boolean 값으로 평가됨.
if-else(else if)
조건식의 평가 결과에 따라 실행할 코드 블록 결정. 따라서 조건식은 boolean 값으로 평가되어야 함.
조건식의 평가 결과가 boolean 값이 아닌 경우 JS엔진에 의해 암묵적으로 boolean 값으로 강제 변환된다.
조건에 따라 값을 결정해 변수에 할당하는 경우 삼항 조건 연산자를 사용하자.
if-else문은 '문' 이기 때문에 값처럼 사용이 불가능하다 => 변수에 할당이 불가능하다.
switch
주어진 표현식을 평가하여 그 값과 일치하는 표현식을 가진 case 문으로 실행 흐름을 옮김.
case문은 상황을 의미하는 표현식. 콜론(:)으로 마친다.
switch문은 boolean(논리적 값)보다는 상황(case)에 따라 실행할 코드 블록을 결정한다.
폴스루 (Fall Through)
switch문에서 case마다 break 키워드를 사용한 break문을 사용하지 않은 경우 발생.
값에 해당하는 case문을 실행한 이후, switch문을 빠져나가지 않고 실행 흐름이 아래로 이동.
폴스루가 유용하게 사용되는 경우도 있음.
여러 case에서 동일한 로직을 실행할 경우.
const day = 6;
switch (day) {
// 폴스루
case 0: case 6:
console.log('주말');
break;
// 폴스루
case 1: case 2: case 3: case 4: case 5:
console.log('평일');
break;
default:
console.log('잘못된 요일');
}
반복문
조건식의 평가 결과가 참인 경우 코드 블록 실행 -> 조건식이 거짓일 때까지 반복
반복문을 대체할 수 있는 함수로 배열 순회시 foreach(), 객체의 프로퍼티 열거 시 사용하는 for...in문, 이터러블 순회 for...of문 등이 있다.
for문
조건식이 거짓일 때까지 반복
for문의 변수 선언문, 조건식, 증감식 모두 작성을 하지 않은 경우, 무한루프가 된다.
while문
조건식의 평가 결과가 참이면 코드 블럭을 반복 실행. 언제나 참인 조건식인 경우 무한루프.
for문은 반복 횟수가 명확할 때, while문은 반복 횟수가 불명확할 때 사용.
조건문의 평가 결과가 거짓이면 종료. 평과 결과가 boolean값이 아니면 암묵적으로 강제 형변환.
do...while문
코드 블럭을 무조건 한 번 실행하고 조건식 평가.
break문
레이블 문(식별자가 붙은 문), 반복문, switch문의 코드 블록 탈출. 이 외에 사용 시 문법 에러가 발생한다.
레이블 문
프로그램의 실행 순서를 제어하는 데 사용됨.
switch문의 case와 default문도 레이블 문이다.
중첩된 for문 외부로 탈출 시에는 유리하지만 그 외에는 권장하지 않는다. => 가독성 안좋고 오류 발생 가능성이 높다.
// 레이블 문 예시
foo: {
console.log(1);
break foo; // foo 레이블 블록문을 탈출
console.log(2);
}
console.log("done");
continue문
반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.
👀 알게 된 내용 / 나의 소감
switch문에서 break문이 없어 아래 코드가 모두 실행되는 경우를 폴스루(fall through)라고 부른다는 걸 처음 알게 되었다.
종종 겪어본 상황인데, 이런 경우를 의미하는 단어를 알게 되어 속이 조금 시원해졌다.