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
의 끝에 오류가 발생합니다. 그래서 그것은 일종의 자기 보험입니다.