Web/모던 자바스크립트 Deep Dive
[모던 자바스크립트 Deep Dive] 08. 제어문
동띵
2023. 8. 11. 11:06
블록문
- 블록문 : 0개 이상의 문을 중괄호로 묶은 것
- 언제나 문의 종료를 의미하는 자체 종결성을 가지고 있어 블록문의 끝에는 세미콜론 붙이지 X
조건문
- 주어진 조건식의 평과 결과에 따라 블록문의 실행을 결정
- boolean 값으로 평가될 수 있는 표현식
- 자바스크립트 조건문 : if esls 문, switch 문
if else 문
- 논리적 참, 거짓에 따라 실행할 코드 블록 결정
- 조건식 평가 결과 true → if 문의 코드 블록 실행 / 조건식 평가 결과 false → else 문의 코드 블록 실행
- 다양한 조건 추가 시 else if 문 사용
- if 문과 else 문은 한 번씩, else if 문은 여러 번 사용 가능
- 대부분의 if else 문은 삼항 연산자로 바꿔쓸 수 있음
- if (true 되는 조건) {true일 때 수행할 코드} else {false일 때 수행할 코드} ⇒ (true 되는 조건) ? true일 때 수행할 코드 : false일 때 수행할 코드
if ~~
else if ~~
else if ~~~
else ~~
switch 문
- 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 실행 흐름 옮김
- case 문 : 상황을 의미하는 표현식을 지정하고 콜론으로 마친 후, 그 뒤에 실행할 문들을 위치시킴
- switch 문의 표현식과 일치하는 case 문이 없다면 default 문으로 이동
- default 문은 선택사항
- switch 문의 표현식은 문자열이나 숫자 값인 경우가 많음
- 논리적 참, 거짓보다는 다양한 상황에 따라 실행할 코드 블록 정함
- fall through
- case 문의 실행문을 실행한 후 break 문이 없어 종료되지 않고 마지막 실행문까지 실행하는 것
- case 문에 해당하는 문의 마지막에 break 문이 없으면 그 다음 case 문의 표현식과 일치하지 않더라도 실행함
- default 문은 어차피 마지막이라 break 생략하는 것이 일반적
- case 문의 실행문을 실행한 후 break 문이 없어 종료되지 않고 마지막 실행문까지 실행하는 것
반복문
- 조건식의 평가 결과가 참인 경우 코드 블록 실행 (조건식이 거짓일 때까지 반복)
- 반복문 대체할 수 있는 기능
- forEach : 배열 순회
- for … in : 객체 프로퍼티 열거
- for … of : 이터러블 순회
for 문
- 조건식이 거짓으로 평가될 때까지 코드 블록 반복 실행
for (변수 선언문 또는 할당문; 조건문; 증감식) {
조건식이 참인 경우 반복 실행될 문
}
- 변수 선언문, 조건식, 증감식은 모두 옵션
- 셋 다 사용하지 않으면 무한루프 됨
- 반복 횟수 명확할 때 사용
while 문
- 주어진 조건문의 평가 결과가 참이면 코드 블록 계속해서 반복 실행
- 조건문 평가 결과 거짓이면 코드 블록 실행하지 않고 종료
- 조건문 평가 결과가 언제나 참이면 무한루프 됨
- 반복 횟수 불명확할 때 사용
- 무한루프에서 탈출하기 위해서는 코드 블록 내에 if 문으로 탈출 조건 만들고 break 문으로 탈출
do while 문
- 코드 블록 먼저 실행 후 조건식 평가 ⇒ 코드 블록은 무조건 한 번 이상 실행됨
break 문
- 코드 블록 탈출
- 레이블 문, 반복문 (for, for…in, for…of, while, do…while), switch 문의 코드 블록 탈출
- 레이블 문, 반복문, switch 문 외에 다른 코드 블록에 break 사용 시 SyntaxError(문법 에러) 발생
- 레이블 문 : 식별자가 붙은 문
- 레이블 문을 탈출하려면 break 문에 레이블 식별자 지정
- foo: { console.log(1); break foo; console.log(2); } console.log('Done!');
- 중첩 for 문의 내부 for 문에서 break 문을 사용하면 외부 for 문으로 이동하는데, 내부 for 문 탈출이 아닌 외부 for 문 탈출을 원하면 레이블 문 사용
- outer: for (let i=0; i<3; i++) { for (let j=0; j<3; j++) { if (i+j === 3) break outer; console.log(`inner [${i}, ${j}]`); } } console.log('Done!');
- switch 문에서 break 사용하여 탈출할 경우 식별자 X
- 레이블 문, 반복문 (for, for…in, for…of, while, do…while), switch 문의 코드 블록 탈출
continue 문
- 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름 이동
- break 문처럼 반복문 탈출하는 것은 아님