
프로그램의 순차적인 흐름을 제어해야 할 때 사용하는 실행문을 제어문이라고 한다.
조건문이란 프로그램 내에서 주어진 표현식의 결과에 따라 별도의 명령을 수행하도록 제어하는 실행문이다.
조건문에서 가장 기본이 되는 실행문은 if이다.

if 문은 표현식의 결과가 참(true)이면 주어진 실행문을 실행하며, 거짓(false)이면 아무것도 실행하지 않는다.

예를 들어 "오후 6시가 되었나요? 그럼 퇴근하세요." 라는 조건문을 다음과 같이 표현할 수 있다.
let time = 18;
if(time >= 20) {
console.log("퇴근하세요.");
}
if 문과 같이 사용할 수 있는 else 문은 if 문의 표현식 결과가 거짓(false)일 때 주어진 실행문을 실행한다.

let time = 18;
if(time >= 18) {
console.log("퇴근하세요.");
} else {
console.log("일해라");
}
else if 문은 if 문처럼 표현식을 설정할 수 있으므로, 중첩된 if문을 좀 더 간결하게 표현할 수 있다. 하나의 조건문 안에서 if문과 else문은 단 한 번만 사용될 수 있다.

let time = 18;
if(time >= 18) {
console.log("퇴근하세요.");
} else if(time >= 13) {
console.log("반차입니다~");
} else {
console.log("일해라");
}
🚫 주의할 점
if 문은 어떤 조건에서 참이 결정되면 if문은 종료가 된다.
- ❌
let time = 18;
if(time >= 13) {
console.log("퇴근하세요.");
} else if(time >= 18) {
console.log("반차입니다~");
} else {
console.log("일해라");
}
위 코드에서 바로 참이 되기 때문에 다른 if문으로 갈 수 없기 때문에 위 예시는 잘 못 된 방법이다.
- ✅
```js
let time = 18;
if(time >= 18) {
console.log("퇴근하세요.");
} else if(time >= 13) {
console.log("반차입니다~");
} else {
console.log("일해라");
}
if문을 세울 때 주의 해야하는 것은 조건들의 범위를 잘 설정해 주는것이 좋다.
자바스크립트에서는 간단한if/else 문을 삼항 연산자를 이용하여 간단히 표현할 수 있다.
// 기존 if 문
let time = 18;
if(time >= 20) {
console.log("퇴근하세요.");
} else {
console.log("일해라");
}
// 삼항연산자
let work = time >= 18? (console.log("퇴근하세요.")) : (console.log("일해라"));
위 코드와 같이 작성할 수 있다. if/else문 말고도 if/else if/else도 작성할 수 있다.
// 기존 else if
let time = 18;
if(time >= 18) {
console.log("퇴근하세요.");
} else if(time >= 13) {
console.log("반차입니다~");
} else {
console.log("일해라");
}
// 삼항연산자
let work = time >= 18? (console.log("퇴근하세요.")) : time >= 13? (console.log("반차입니다~")) : (console.log("일해라"));
switch문은 if/else 문과 마찬가지로 주어진 조건 값에 따라 프로그램이 다른 명령을 수행하도록 하는 조건문이다.
switch문은 if 문보다 가독성 측면에서는 더 좋다. if의 경우 if(i>=10 && 10=>i) 이와 같이 범위를 정할 수 있지만 switch의 경우는 case를 쓰기 때문에 값이 하나일 때 사용한다.
switch (menu){
case 1 : console.log("물건사기");
break;
case 2 : console.log("잔고확인");
break;
case 3 : console.log("히스토리확인");
break;
default : console.log("홈으로 돌아가기");
}
default 절은 조건 값이 위에 나열된 어떠한 case 절에도 해당하지 않을 때 실행된다. 이 구문은 반드시 존재해야 하는 것은 아니다. 또 한 각 case 절은 반드시 break키워드를 포함하고 있어야 한다. break 키워드는 조건 값에 해당하는 case절이나 default 절이 실행된 뒤에 전체 switch문을 빠져나가게 해준다.
💡 default 절의 위치가 반드시 switch 문의 맨 마지막일 필요는 없다.
반복문이란 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 실행문이다. 프로그램이 처리하는 대부분의 코드는 반복적인 형태가 많으므로, 가장 많이 사용되는 실행문 중 하나이다.
while 문은 특정 조건을 만족할 때까지 계속해서 주어진 실행문을 반복한다.

🚫 주의할 점
조건문이 참이 될 때까지 주어진 실행문을 반복한다고 했다. 그렇다면 계속 참인 조건문이라면? 무한 반복이 일어난다.while(true){ console.log("while문의 무한 반복") }그렇다면 무한반복에서 벗어나려면 어떻게 해야하나?
break를 사용하면 된다.let val; while (true){ val = Math.ceil(Math.random() * 10); document.write("val : " + val + "<br>"); if (val==7){ break; } }
while 문은 루프에 진입하기 전에 먼저 표현식부터 검사한다. 하지만 do / while 문은 먼저 루프를 한 번 실행한 후에 표현식을 검사한다. 즉, do / while문은 표현식의 결과와 상관없이 무조건 한 번은 루프를 실행한다.

var i = 1, j = 1;
do{
document.write("j : " + (j++) + "<br>");
} while(j > 3)
for문은 while 문과 달리 자체적으로 초기식, 표현식, 증감식을 모두 포함하고 있는 반복문이다.
for (초기식; 표현식; 증감식) {
표현식의 결과가 참인 동안 반복적으로 실행하고자 하는 실행문;
}
for(let i = 0; i <= 10; i++) // 1씩 증가하는 반복문
for문 안에 for문을 넣을 수 있다. 이것을 중첩 for문이라고 한다.
for(let i=2; i<=9; i++){
for(let j=1; j <=9; j++){
console.log(i+"x"+j+"=" + i*j);
}
}
for / in 문은 일반적인 for문과는 전혀 다른 형태의 반복문이다. for / in 문은 해당 객체의 모든 열거할 수 있는 프로퍼티를 순회할 수 있도록 해준다.
// 기존 for 문
let fruit = ["banana", "apple", "mango", "grape"];
for(let i = 0; i<fruit.length; i++){
console.log(fruit[i]);
}
// for / in 문
for (var i in fruit) { // 위와 같은 동작을 하는 for / in 문
console.log(fruit[i]);
}
for / of 문은 반복할 수 있는 객체(iterable objects)를 순회할 수 있도록 해주는 반복문이다.
자바스크립트에서 반복할 수 있는 객체에는 Array, Map, Set, arguments 객체 등이 있다. 이 반복문은 루프마다 객체의 열거할 수 있는 프로퍼티의 값을 지정된 변수에 대입한다.
let arr = [3, 5, 7];
arr.foo = "hello";
for (let i in arr) {
console.log(i); // logs "0", "1", "2", "foo"
}
for (let i of arr) {
console.log(i); // logs "3", "5", "7"
}