08장 제어문
- 제어문 : 조건에 따라 코드 블록을 실행하거나 반복실행 할 때 사용
8.1 블록문
- 블록문 : 0개 이상의 문을 중괄호로 묶은 것.
- 자바스크립트는 블록문을 하나의 실행 단위로 취급
- 단독으로 사용 가능하지만, 일반적으로 제어문이나 함수를 정의할 때 사용하는 것이 일반적
- 블록문의 끝에는 세미콜론을 붙이지 않음.
8.2 조건문
- 조건문 : 주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정함.
- 조건식 : 불리언 값으로 평가될 수 있는 표현식
8.2.1 if...else 문
if (조건식) {
} else {
}
- 조건식은 불리언값으로 평가되어야 하며, 불리언 값이 아닐 경우 암묵적인 타입 변환으로 강제 변환되어 평가된다.
- 조건식을 추가하고 싶을 때엔
else if ()
를 추가 해주면 된다.
if (조건식1) {
} else if (조건식2) {
} else {
}
- else와 else if는 옵션이고, else if는 여러번 사용 가능하다.
- 대부분의 if...else는 삼항 조건 연산자로 바꿔 쓸 수 있다.
var x = 2;
var result;
if (x % 2) {
result = '홀수';
} else {
result = '짝수';
}
console.log(result);
var result2 = (x % 2) ? '홀수' : '짝수';
console.log(result2);
- if... else if ... else 도 삼항 조건 연산자로 바꿔 쓸 수 있지만, 가독성에 좋지 않다.
var num = 2;
var kind = num ? (num > 0 ? '양수' : '음수') : '영';
console.log(kind);
8.2.2 switch문
- switch문 : 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case문으로 실행 흐름을 옮김.
- switch문의 표현식은 불리언 값보다는 문자열이나 숫자 값 인 경우가 많음.
- 각 case를 적어주고, break를 적어줘야 폴스루(switch를 탈출하지 않고 그 아래의 값까지 다 가져오는 것)를 막을 수 있다.
- default는 옵션인데, 가장 마지막에 적어줘야 한다.
var value = 'apple';
switch(value) {
case 'apple':
break;
case 'banana':
break;
default:
}
- switch문은 사용이 복작하기 때문에, if...else를 사용하는 것을 권장한다. if...else문보다 switch의 가독성이 더 좋을 때에만 사용하는 것이 좋다.
8.3 반복문
- 반복문 : 조건식의 평가 결과가 참인 경우 코드 블록을 실행하고, 조건식이 거짓일때까지 반복한다.
8.3.1 for문
for(변수 선언문 또는 할당문; 조건식; 증감식) {
}
for(var i = 0; i < 2; i++) {
console.log(i);
}
- for문에 변수 선언문, 조건식, 증감식은 모두 옵션이다. 단, 어떤 식도 선언하지 않으면 무한루프에 빠지게 된다.
for( ; ; ) {}
- for문과 for문은 중첩해 사용할 수 있다.
for(var i = 0; i <= 3; i++) {
for(var j = 0; j <= 2; j++) {
console.log(`[${i}, ${j}]`);
}
}
8.3.2 while문
- while문 : 주어진 조건식의 평가 결과가 참이면, 블록을 계속해서 반복 실행함.
- for문은 반복횟수가 명확할 때 사용, while문은 반복 횟수가 불명확할 때 주로 사용
- 평가 결과가 거짓일때 반복문이 종료된다.
var count = 0;
while (count < 3) {
console.log(count);
count++;
}
- 조건식을 true로 하면 무한루프를 만들 수 있는데,
break
를 이용하면 무한루프를 탈출 할 수 있다.
var count = 0;
while (true) {
console.log(count);
count++;
if(count === 3) break;
}
8.3.3 do...while문
- do...while문 : 코드 블록을 먼저 실행하고 조건식을 평가한다. 무조건 한 번 이상 실행된다.
var count = 0;
do {
console.log(count);
count++;
} while (count < 3);
8.4 break문
- break문 : 레이블문, 반복문, switch문의 코드 블록을 탈출한다.
- 이 외에 코드 블록에서 사용하면 SyntaxError(문법에러)가 발생한다
if (true) {
break;
}
- 레이블 문 : 프로그램의 실행 순서를 제어하는데 사용한다. 중첩된 for문 외부로 탈출할 때에는 유용하지만, 프로그램의 흐름이 복잡해져서 가독성이 나빠지고 오류를 발생시킬 가능성이 높아지기 때문에 권장하지 않는다. switch의 case문과 default문도 레이블 문에 속한다
- 중첩된 for문의 내부 for 문에서 break 문을 실행하면, 내부 for문을 탈출하여 외부 for문으로 진입 한다.
outer: for(var i = 0; i < 3; i++) {
for(var j = 0; j < 3; j++) {
if(i + j === 3) break outer;
console.log(`inner [${i} ${j}]`);
}
}
- break문은 반복문을 더 이상 진행하지 않아도 될 때 불필요한 반복을 회피할 수 있어 유용하다
var string = 'Hello World.';
var search = 'l';
var index;
for (var i = 0; i < string.length; i++) {
if(string[i] === search) {
index = i;
break;
}
}
console.log(index);
8.5 continue문
- continue문 : 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다. break문처럼 반복문을 탈출하지는 않는다.
var string = 'Hello World.';
var search = 'l';
var count = 0;
for(var i = 0; i < string.length; i++) {
if(string[i] === search) continue;
count++;
}
console.log(count);