모던 JavaScript 튜토리얼을 읽고 정리하였습니다.
switch문
복수의 if
조건문은 switch
문으로 바꿀 수 있다. switch
문을 사용한 비교법은 특정 변수를 다양한 상황에서 비교할 수 있게 하고, 코드 자체가 비교 상황을 잘 설명한다는 장점도 있다.
문법
switch
문은 하나 이상의 case
문으로 구성된다. 대개 default
문도 있지만 필수는 아니다.
switch(x) {
case 'value1':
...
[break]
case 'value2':
...
[break]
default:
...
[break]
}
- 변수 x의 값과 첫번째 case문의 값 ‘value1’를 일치 비교한 후, 두번째 case문의 값 ‘value2’와 비교한다. 이러한 과정을 반복한다.
- case 문에서 변수 x의 값과 일치하는 값을 찾으면 해당 case문의 아래 코드가 실행된다. 이때, break문을 만나거나 switch문이 끝나면 코드의 실행은 멈춘다.
- 값과 일치하는 case문이 없다면, default문이 있을 경우, default문 아래의 코드가 실행된다.
예시
아래 예시에는 case4
아래의 코드가 실행될 것이다. 만약 break
문이 없다면 조건에 부합하는지 연부를 따지지 않고 이어지는 case문을 실행한다.
let a = 2 + 2;
switch (a) {
case 3:
alert('비교하려는 값보다 작다.');
break;
case 4:
alert('비교하려는 값과 일치한다.');
break;
case 5:
alert('비교하려는 값보다 크다.');
break;
default:
alert('어떤 값인지 파악이 되지 않는다.');
}
break문이 없는 경우에는, 다음과 같이 실행된다.
let a = 2 + 2;
switch (a) {
case 3:
alert( '비교하려는 값보다 작습니다.' );
case 4:
alert( '비교하려는 값과 일치합니다.' );
case 5:
alert( '비교하려는 값보다 큽니다.' );
default:
alert( "어떤 값인지 파악이 되지 않습니다." );
}
// 실행되는 코드
alert( '비교하려는 값과 일치합니다.' );
alert( '비교하려는 값보다 큽니다.' );
alert( "어떤 값인지 파악이 되지 않습니다." );
switch/case문의 인수엔 어떤 표현식이든 올 수 있다.
let a = "1"; let b = 0; switch (+a) { case b + 1: alert("표현식 +a는 1, 표현식 b+1는 1이므로 이 코드가 실행된다."); break; default: alert("이 코드는 실행되지 않는다."); }
표현식
+a
를 평가하면 1이 된다. 이 값은 첫번째 case문의 표현식b+1
을 평가한 값과 일치하다. 따라서 첫 번째 case문 아래의 코드가 실행된다.
여러 개의 “case”문 묶기
코드가 같은 case문은 break를 생략함으로써 한데 묶을 수가 있다.
let a = 3;
switch (a) {
case 4:
alert('계산이 맞습니다!');
break;
case 3:
case 5:
alert('계산이 틀립니다!');
break;
default:
alert('계산 결과가 이상하네요.');
}
위의 예시에서는 case3과 case5는 동일한 메시지를 보여준다. case3의 바로 아래 줄엔 case5가 있고, 그 사이에 break문도 없으므로 case5 가장 밑의 break문을 만날 때까지 코드가 계속 실행되기 때문이다.
자료형의 중요성
switch문은 일차 비교로 조건을 확인하므로 비교하는 값들의 형까지 모두 같아야만 case문이 실행된다.
let arg = prompt('값을 입력해주세요.');
switch (arg) {
case '0':
case '1':
alert( '0이나 1을 입력하셨습니다.');
break;
case '2':
alert( '2을 입력하셨습니다.');
break;
case 3:
alert('이 코드는 절대 실행되지 않습니다!');
break;
default:
alert('알 수 없는 값을 입력하셨습니다.');
}
만약 사용자가 위의 예시에서 3을 입력하여도 이 문자열 형의 값이 숫자형 3과 비교되므로 형 자체가 달라 case3 아래의 코드는 절대 실행되지 않고, default문이 실행된다.
Comments