switch 문은 여러 if 검사를 대체할 수 있습니다.
이는 하나의 값을 여러 변형과 비교하는 보다 설명적인 방법을 제공합니다.
switch 에는 하나 이상의 case 블록과 선택적 기본값이 있습니다.
다음과 같습니다:
스위치(x) {
케이스 '값1': // if (x === '값1')
...
[부서지다]
case 'value2': // if (x === 'value2')
...
[부서지다]
기본:
...
[부서지다]
} x 값은 첫 번째 case (즉, value1 )의 값과 두 번째 경우( value2 ) 등의 값과 완전히 동일한지 확인됩니다.
동일성이 발견되면 switch 해당하는 case 부터 시작하여 가장 가까운 break 까지(또는 switch 가 끝날 때까지) 코드를 실행하기 시작합니다.
일치하는 사례가 없으면 default 코드가 실행됩니다(존재하는 경우).
switch 의 예(실행된 코드가 강조 표시됨):
a = 2 + 2라고 하자;
스위치 (a) {
사례 3:
경고( '너무 작습니다' );
부서지다;
사례 4:
Alert( '정확히!' );
부서지다;
사례 5:
경고( '너무 큽니다' );
부서지다;
기본:
Alert( "그런 값을 모릅니다" );
} 여기서 switch 3 인 첫 번째 case 변형의 a 비교하기 시작합니다. 경기가 실패합니다.
그러면 4 . 일치하므로 case 4 부터 가장 가까운 break 까지 실행이 시작됩니다.
break 없으면 검사 없이 다음 case 로 실행이 계속됩니다.
break 없는 예:
a = 2 + 2라고 하자;
스위치 (a) {
사례 3:
경고( '너무 작습니다' );
사례 4:
Alert( '정확히!' );
사례 5:
경고( '너무 큽니다' );
기본:
Alert( "그런 값을 모릅니다" );
} 위의 예에서는 세 가지 alert 가 순차적으로 실행되는 것을 볼 수 있습니다.
Alert( '정확히!' ); 경고( '너무 큽니다' ); Alert( "그런 값을 모릅니다" );
모든 표현식은 switch/case 인수가 될 수 있습니다.
switch 와 case 모두 임의의 표현을 허용합니다.
예를 들어:
a = "1"이라고 하자;
b = 0이라고 하자;
스위치 (+a) {
사례 b + 1:
Alert("이것은 +a가 1이기 때문에 실행되며 정확히 b+1과 같습니다.");
부서지다;
기본:
Alert("실행되지 않습니다.");
} 여기서 +a 1 제공합니다. case b + 1 과 비교되어 해당 코드가 실행됩니다.
동일한 코드를 공유하는 여러 가지 변형 case 그룹화할 수 있습니다.
예를 들어 case 3 과 case 5 에 대해 동일한 코드를 실행하려면 다음을 수행합니다.
a = 3이라고 하자;
스위치 (a) {
사례 4:
Alert('맞아요!');
부서지다;
사례 3: // (*) 두 사례를 그룹화했습니다.
사례 5:
Alert('틀렸어요!');
Alert("수학 수업을 듣는 게 어때요?");
부서지다;
기본:
Alert('결과가 이상합니다. 정말 그렇네요.');
} 이제 3 과 5 모두 동일한 메시지를 표시합니다.
케이스를 "그룹화"하는 기능은 switch/case break 없이 작동하는 방식의 부작용입니다. 여기서 case 3 의 실행은 줄 (*) 에서 시작하여 break 없기 때문에 case 5 통과합니다.
동등성 검사는 항상 엄격하다는 점을 강조하겠습니다. 일치하려면 값의 유형이 동일해야 합니다.
예를 들어 다음 코드를 살펴보겠습니다.
let arg = 프롬프트("값을 입력하시겠습니까?");
스위치(인수) {
사례 '0':
사례 '1':
Alert( '1 또는 0' );
부서지다;
사례 '2':
경고( '2' );
부서지다;
사례 3:
Alert( '실행되지 않습니다!' );
부서지다;
기본:
Alert( '알 수 없는 값' );
} 0 , 1 의 경우 첫 번째 alert 실행됩니다.
2 의 경우 두 번째 alert 실행됩니다.
그러나 3 의 경우 prompt 결과는 문자열 "3" 입니다. 이는 숫자 3 과 === 동일하지 않습니다. 따라서 case 3 에는 데드 코드가 있습니다! default 변형이 실행됩니다.
중요도: 5
다음 switch 에 해당하는 if..else 사용하여 코드를 작성합니다.
스위치(브라우저) {
사례 '가장자리':
Alert( "당신은 엣지를 갖고 있습니다!" );
부서지다;
케이스 '크롬':
'Firefox'의 경우:
사례 '사파리':
사례 '오페라':
Alert( '알겠습니다. 이 브라우저도 지원합니다.' );
부서지다;
기본:
Alert( '이 페이지가 괜찮아 보이길 바랍니다!' );
}
switch 의 기능을 정확하게 일치시키려면 if 는 엄격한 비교 '===' 를 사용해야 합니다.
하지만 주어진 문자열에 대해서는 간단한 '==' 도 작동합니다.
if(브라우저 == '가장자리') {
Alert("당신은 엣지를 갖고 있습니다!");
} else if (브라우저 == '크롬'
|| 브라우저 == '파이어폭스'
|| 브라우저 == '사파리'
|| 브라우저 == '오페라') {
Alert( '알겠습니다. 이 브라우저도 지원합니다.' );
} 또 다른 {
Alert( '이 페이지가 괜찮아 보이길 바랍니다!' );
} 참고: 구성 browser == 'Chrome' || browser == 'Firefox' … 더 나은 가독성을 위해 여러 줄로 분할됩니다.
그러나 switch 구성은 여전히 더 명확하고 설명적입니다.
중요도: 4
단일 switch 문을 사용하여 아래 코드를 다시 작성합니다.
let a = +prompt('a?', '');
if (a == 0) {
경고( 0 );
}
if (a == 1) {
경고( 1 );
}
if (a == 2 || a == 3) {
경고( '2,3' );
}
처음 두 개의 검사는 두 개의 case 로 변환됩니다. 세 번째 확인은 두 가지 경우로 나뉩니다.
let a = +prompt('a?', '');
스위치 (a) {
사례 0:
경고( 0 );
부서지다;
사례 1:
경고( 1 );
부서지다;
사례 2:
사례 3:
경고( '2,3' );
부서지다;
} 참고: 하단의 break 은 필요하지 않습니다. 하지만 우리는 미래에도 사용할 수 있는 코드를 만들기 위해 이를 넣었습니다.
앞으로는 case 4 와 같은 case 하나 더 추가할 가능성이 있습니다. 그리고 그 앞에 중단을 추가하는 것을 잊어버리면 case 3 의 끝에 오류가 발생합니다. 그래서 그것은 일종의 자기 보험입니다.