2023.02.05
자바스크립트 스터디 3회차
공부 사이트: https://poiemaweb.com/
8. 제어문
1) 블록문
0개 이상의 문들을 중괄호로 묶은 것. 문의 끝에는 세미콜론을 붙이나, 블록문은 세미콜론을 붙이지 않는다.
// 블록문
{
var num = 10;
console.log(num);
}
2) 조건문
주어진 조건식의 평가 결과에 따라 코드 블록(블록문)의 실행을 결정함.
조건식 = boolean 값으로 평가될 수 있는 표현식
① if else문
- 조건식의 평가 결과가 boolean이 아니라면 boolean 값으로 강제 변환되어 논리적 참/거짓을 판단
- 조건식을 추가하기 위해서 else if문 사용
- 코드블록 내 문이 하나라면 중괄호 생략 가능
- 대부분의 if..else문은 삼항 조건 연산자로 바뀔 수 있음
var x = 2;
var result1 = x % 2 ? '홀수' : '짝수'; //삼항 조건 연산자
console.log(result1); //짝수
var result2 = num ? (num > 0 ? '양수' : '음수') : '영';
console.log(result2); //양수
[TIP] 삼항 조건 연산자
condition ? exprIfTrue : exprIfFalse
② switch문
- 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case문으로 실행 순서를 이동
- case문, defualt문
switch (표현식) {
case 표현식1:
//실행구문
break;
case 표현식2:
//실행구문
break;
default:
//실행구문 (switch문의 표현식과 일치하는 표현식 갖는 case문이 없을 때)
break;
}
※ 주의할 점: break문이 없으면 표현식과 일치하는 case문을 실행해도 switch문을 탈출하지 않는다. 즉, 일치하는 case문으로 실행 순서 이동 후 그 아래에 있는 다른 case문도 모두 실행하게 된다. → 폴스루(fall through)
var score = 'C'
switch (score) {
case 'A':
console.log('A등급입니다. ');
case 'B':
console.log('B등급입니다. ');
case 'C':
console.log('C등급입니다. ');
default:
console.log('D등급입니다. ');
}
switch문은 다양한 키워드를 사용해야 하고, 폴스루가 발생하는 등 문법이 복잡하다. if else 문 사용을 권장.
3) 반복문
조건식 평가 결과가 참이면 코드 블록 실행. 그 후 조건식을 다시 검사하여 여전히 참이면 코드 블록 재실행 ...
조건문이 거짓일 때까지 반복됨.
① for 문: 조건식이 거짓으로 판별될 떄까지 코드블록 반목 실행
for(초기화식;조건식;증감식){
//조건식이 참인 경우 반복실행
}
[for문 실행순서]
- 초기화식 실행
- 조건식 평가
- 코드 블록 실행
- 증감식 실행
.... 증감식 실행 종료 후 다시 조건식을 평가하는데, 여기서 평가 결과가 true면 반복, false면 종료된다.
// 무한 루프
for (;;) {
....
}
② while 문
- 조건식 평가 결과가 참이면 코드블록 반복 실행.
- 조건식의 평가 결과가 boolean 값이 아니면 boolean 값으로 강제 변환되어 논리적 참/거짓을 구분.
var count = 0;
while (count < 3) {
console.log(count);
count++;
}
//무한루프
while (true) {
...
}
무한 루프를 탈출하기 위해서는 코드 블럭 내 탈출 조건을 만들어 주면 된다.
var count = 0;
// 무한루프
while (true) {
console.log(count);
count++;
if (count === 3) break;
}
③ do while문: 코드 블록을 먼저 실행하고 조건식을 평가한다. 코드 블록은 최소 1회 실행.
var count = 0;
// 무한루프
do {
console.log(count);
count++;
} while(count < 3);
④ break 문
- 레이블 문, 반복문, switch문의 코드 블록을 탈출
- if문에 사용하면 문법 에러
- 레이블 문(Label statement): 식별자가 붙은 문. 프로그램의 실행 순서를 제어하기 위해 사용함 (case문, default문 등..)
// test라는 레이블 식별자가 붙은 문
test1: console.log('test');
test2: {
console.log('사과');
break test2;
console.log('딸기');
}
console.log('냠냠');
- 중첩 for문의 내부 for문에서 break문 사용 시 내부 for문을 탈출함. 외부 for문으로 진입
- 외부 for문까지 한번에 탈출하려면 레이블 문을 사용하면 된다.
test: for(var i=0;i<3;i++){
for(var j=0;j<3;j++){
console.log(i + "," + j)
if(i+j ===3) break test;
}
}
console.log('완료');
- 중첩 for문 탈출 시 레이블 문은 유용하나, 그 외의 경우 레이블 문을 권장하지 않음. 프로그램의 흐름이 복잡해져서 가독성이 나빠지고 오류 발생 가능성이 높아지기 때문임.
⑤ continue 문
- 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문 증감식으로 이동. 탈출X
var string = 'Hello World.';
var count = 0;
for (var i = 0; i < string.length; i++) {
if (string[i] !== 'l') continue; //i번째 문자가 l이면 continue 사용함 (count++; 수행하지 않음)
count++;
}
console.log(count);
// 참고로 String.prototype.match 메소드를 사용해도 같은 동작을 한다.
console.log(string.match(/l/g).length); // 3
'프로그래밍 > js' 카테고리의 다른 글
lessons 10. 객체 (0) | 2023.02.05 |
---|---|
lessons 9. 타입 변환과 단축 평가 (1) | 2023.02.05 |
lessons 7. 연산자 (0) | 2023.01.31 |
lessons 6. 데이터 타입과 변수 (1) | 2023.01.30 |
lessons 5. 자바스크립트 기본 문법 (0) | 2023.01.30 |