제어문은 조건에 따라 코드 블록을 실행 하거나 반복 실행할 때 사용하게 됩니다.
보통의 코드는 탑다운 방식으로 위에서 아래로 읽어나가게 되죠?
하지만 제어문을 사용하게 되면,
작성자의 의도대로 코드를 읽도록 만들 수 있습니다.
블록문
블록문은 0개 이상의 문을 중괄호로 묶은 것을 말합니다.
앞으로 코드 블록, 블록 이라고 칭하는 것들은 모두 같은 것입니다.
단독으로도 사용은 할 수 있지만, 일반적으로 다른 제어문이나 함수를 정의할 때 사용합니다.
{
const foo = 10;
}
참고로 중괄호는 이미 자체적으로 종결성을 가지고 있기 때문에 세미콜론은 붙이지 않아도 된다고 했죠?
조건문
- if...else 문
if (조건식) {
// 조건식이 참일 때 수행할 코드블록
} else {
// 조건식이 거짓일 때 수행할 코드블록
}
if (조건식) {
// 조건식이 참일 때 수행할 코드블록
} else if (조건식 2) {
// 조건식2가 참일 때 수행할 코드블록
} else {
// 조건식이 거짓일 때 수행할 코드블록
}
조건은 여러개 작성해서 넣을 수 있습니다.
다만 조건을 작성할때 주의할 점은 각 조건에 해당하는 값을 얻기 위해 조건의 위치 및 값을 잘 조정해야 합니다.
예를 들어 밀가루와 쌀알, 콩이 섞였다고 할때, 가장 먼저 콩을 얻기 위해 성긴 채를 사용해 거릅니다.
그리고 조금 가는 채를 이용해 쌀알을 걸러내면 나머지는 밀가루만 남게 되죠.
이렇게 우리는 원하는 목적에 따라 조건을 잘 조정할 필요가 있습니다!
- Switch 문
switch (표현식) {
case 표현식1:
//표현식과 표현식1이 일치하면 실행될 문;
break;
case 표현식2:
//표현식과 표현식2가 일치하면 실행될 문;
break;
default:
//표현식과 일치하는 case문이 없을 경우 실행될 문;
}
if문과는 다르게 case가 끝나면 ( : )콜론으로 끝을 표현해줘야 하고, break로 실행될 문이 끝나면 마치게 해줘야 합니다.
만약 break를 사용하지 않으면, fall-through가 발생합니다.
표현식에 해당해도 그대로 다음 case가 실행되어 버리는 것이죠.
그래서 결국 마지막 default에 해당하는 문이 반환될 것입니다.
상황에 따라 이런 fall-through를 활용할 수도 있습니다.
var year = 2000;
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:
days = ((year % 4 ===0 && year % 100 !== 0) || (year % 400 === 0) > 29 : 28;
break;
default:
console.log('값은 1부터 12까지만 입력할 수 있습니다.');
}
이 조건문은 윤년인지 파악을 하고 2월이 몇일까지 있는지 확인 하는 조건문입니다.
폴스루는 여러 케이스들을 한꺼번에 묶을 때 사용할 수 있겠습니다.
반복문
- for 문
for (변수 선언문 또는 할당문; 조건식; 증감식) {
//조건식이 참인 경우 반복 수행한 문;
}
for (let i = 0; i<=N; i++) {
console.log(i);
}
//1
//2
//3
//...
//N
조건식에 해당이 안될때까지 증감식을 통해 변수가 변하게 됩니다.
그 횟수만큼 반복문 안에 들어있는 문이 반복됩니다.
- while 문
while (조건문) {
//조건문이 참일 때 반복할 문
//조건문이 거짓이 되도록 만드는 증감식
}
보통의 경우 while문을 사용할 때는 조건문이 거짓이 될때까지를 범위로 지정해서 사용합니다.
즉, 증감식을 통해 조건문을 거짓으로 만들고 반복문을 종료시킵니다.
- do...while 문
do {
//우선 조건문에 해당하지 않아도 실행할 문;
//조건문을 거짓으로 만들 증감식
} while (조건문);
while문과는 다르게 조건문에 해당하지 않아도 한번은 실행되도록 만들 수 있습니다.
break 문
반복문, 조건문을 탈출할때 사용하는 문입니다.
구체적으로 레이블 문, 반복문, switch문의 코드 블록을 탈출합니다.
만약 이 외의 코드 블록에서 break문을 사용하면 syntaxError를 발생시킵니다.
continue 문
var string = 'Hello World.';
var search = 'l';
var count = 0;
for (let i = 0; i < string.length; i++) {
if (string[i] !== search) continue;
count++;
}
console.log(count);
위 코드를 보면 for 문 속에서 반복하게 되는 조건문이 있습니다.
그리고 continue문을 사용함으로써
만약 조건이 참이라면 count를 증가시키지 않고 다음 반복을 진행합니다.
어? 근데 배열도 아닌데 문자를 순회할 수 있는걸까요?
(순회는 말그대로 값들을 모아둔 집합, 배열이나, 객체들을 도는 것을 말합니다.)
근데 문자열을 배열처럼 접근할 수 있는 이유는 뭘까요?
Hello를 살펴볼까요?
H (72)
e (101)
l (108)
l (108)
o (111)
각 문자는 16비트 유니코드(UTF-16)로 표현됩니다.
그리고 각 인덱스는 해당문자의 UTF-16의 코드 포인트로 가리키고,
이들을 배열로 저장하게 됩니다.
결국 문자열도 각 코드를 저장하는 주소들의 배열인 셈이죠.
'💪JavaScript > script.js' 카테고리의 다른 글
[모던 자바스크립트 딥다이브]_객체 리터럴 어디까지 보고 오셨어요? (0) | 2023.08.20 |
---|---|
[모던 자바스크립트 딥다이브]_타입 변환과 단축 평가 어디까지 보고 오셨어요? (0) | 2023.08.05 |
[모던 자바스크립트 딥다이브]_연산자 어디까지 보고 오셨어요? (0) | 2023.08.05 |
[모던 자바스크립트 딥다이브]_데이터 타입 어디까지 보고 오셨어요? (0) | 2023.08.05 |
[모던 자바스크립트 딥다이브]_표현식과 문 어디까지 보고 오셨어요? (0) | 2023.07.30 |