제어문(control flow statement)는 조건에따라 코드를 실행하거나 반복 실행할 때 사용한다.
블록문(block statement)는 0개나 그 이상의 문을 중괄호로 묶은것이다. 자바스크립트는 블록문을 하나의 실행 단위로 취급한다.
{
let a = 1 // 블록문
}
조건문(conditional statement)는 조건식의 평가 결과에 따라 블록문의 실행을 결정한다.
자바스크립트는 if...else와 switch문을 제공한다.
조건식의 평가 결과에 따라 실행한 블록문을 정하는것이다.
if(조건문 불린값으로 결정이 나야한다){
// 조건문이 true일때 실행될 블록문
}else if(위에 조건문이 false일때 실행될 조건문){
// 조건문이 true일때 실행될 블록문
}
else{
// 조건문이 false일때 실행될 블록문
}
삼항 조건 연산자로 바꿔 쓸 수도 있다.
if(1 < 2){
a = 2
}else{
a = 1
}
// 위의 if문을 삼항으로 바꾸면
1 < 2 ? a = 2 : a = 1
// 이렇게 된다 추가로 조건문을 더 달고 싶다면
1 < 2 ? a = 2 : 1 < 2 ? a = 1 : a = 2
// 이렇게 추가로 조건문을 더 달 수 있습니다
추가로 if문은 변수에 할당이 안되지만 삼항 연산자는 값처럼 사용 가능하기에 변수에 할당할 수 있습니다.
표현식을 평가하여 값이 일치하는 case문으로 실행 흐름을 바꾼다.
switch (표현식) {
case 표현식 :
switch 표현식이 일치하면 실행될 문
break //요놈 빼먹으면 표현식 일치해도 default 까지 빠짐 폴스루 라 한다.
default :
표현식이 일치하는게 없을 시 실행될 문
}
예시
let a = 2
let b
switch (a) {
case 0 : b = "0"
break;
case 1 : b = "1"
break;
case 2 : b = "2"
break;
default : b = "끝"
}
폴스루를 활용해 윤년 판별 예제를 만들어 본다.
let year = 2000 // 2000년 2월 29일 윤년이다
let month = 2
let day
switch (month) { //case 뒤의 번호는 월을 뜻한다
case 1: case 3: case 5: case 2:
day = ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0) ? 29 : 28)
break;
default:
day = 'hello err'
}
console.log(day)
반복문(loop statement)는 조건식의 평가가 참인 경우 코드 블록을 실행시킨다.
조건식이 거짓이 될때까지 반복한다. for문, while문, do...while문이 있다.
반복문을 대체하는 기능???
forEach메서드 : 배열을 순회할때 사용
for...in문 : 객체의 프로퍼티를 열거할때 사용
for...of문 : 이터러블을 순회할때 사용
조건식이 거짓으로 평가될 때까지 코드 블록을 실행한다.
//for(변수 선언 할당문 , 조건식 , 증감식)
for(let i = 0; i < 2; i++){ // for문 보면 변수 i를 자주 쓰는데 interation의 i다.
console.log(i) // 0 1 증감식은 코드 블록 실행 후 평가된다.
}
for문의 실행 흐름

조건식이 참이면 코드 블록을 반복 실행한다. 위의 for문과 차이점은 반복 횟수가 정해져 있지 않다는 점이다.
let count = 0 while(count < 2) { console.log(count) count++ // 0 1 count변수가 2가되면 거짓이기에 반복문을 벗어난다. break도 가능 }
코드 블록을 먼저 실행하고 조건식을 평가한다. 조건식의 참과 거짓 상관없이 한번은 실행된다.
let count = 0
do {
console.log(count)
count++ // 0 1
}while(count < 2)
위에서 한번씩 다뤘는데 break문은 레이블문과 반복문에서 탈출한다.
이중 for문중 내부 for문에 break문을 실행하면 외부 for문으로 진입한다. 아예 외부 for문에서 탈출하고 싶으면 레이블 문을 사용하면 된다.
foo: for(let i = 0; i < 2; i++){
for(let j = 0; j < 2; j++){
console.log('infor')
break foo
}
console.log('outfor') // 'infor' 내부에서 break를 만났지만 외부 for문도 탈출했다.
}
레이블문??
레이블문(label statement)는 프로그램 실행 순서를 제어하는데 사용한다.foo:{ console.log(0) break foo console.log(1) // 0 break문을 만나 레이블문을 탈출했다. }
반복문의 코드 블록 실행을 중단하고 증감식으로 이동한다.
for(let i = 0; i < 3; i++){
if(i === 1) continue;
console.log(i) // 0 2 countinue를 활용해서 1을 표기하지 않았다.
}