Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 switch문의 엄격한 비교(===) 완벽 이해하기

switch문은 엄격한 비교(===)만 사용합니다

자바스크립트의 switch문은 조건을 판별할 때 오직 엄격한 비교(strict comparison, ===)만 사용합니다. == 연산자처럼 비교 전에 자료형을 변환하지 않기 때문에, switch 표현식의 값과 case 라벨의 값이 값과 자료형 모두 일치해야만 해당 case가 실행됩니다.

일치하는 case를 찾지 못하면 switch문은 곧바로 default 블록을 실행합니다.

왜 이 특성이 중요할까요?

HTML 입력 필드(<input>)에서 가져온 값은 숫자처럼 보여도 항상 문자열(string)입니다. 따라서 이 값을 숫자형 case 라벨(case 1, case 2 등)과 비교하면 자료형이 서로 다르기 때문에 절대 일치하지 않고, 올바른 숫자를 입력해도 계속 default 문이 실행됩니다.

예제 코드

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
  body {
    font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  }
  .result {
    font-size: 20px;
    font-weight: 500;
  }
</style>
</head>
<body>
<h1>자바스크립트 switch문 엄격한 비교</h1>
요일 입력 (1~7)<input type="text" class="day" /><button class="Btn">
확인
</button>
<div style="color: green;" class="result"></div>
<h3>
위 버튼을 클릭하면 switch문이 엄격한 비교를 수행하는지 확인할 수 있습니다
</h3>
<script>
  let dayVal = document.querySelector(".day");
  let resEle = document.querySelector(".result");
  document.querySelector(".Btn").addEventListener("click", () => {
    switch (dayVal.value) {
      case 1:
        resEle.innerHTML = "월요일입니다";
        break;
      case 2:
        resEle.innerHTML = "화요일입니다";
        break;
      case 3:
        resEle.innerHTML = "수요일입니다";
        break;
      case 4:
        resEle.innerHTML = "목요일입니다";
        break;
      case 5:
        resEle.innerHTML = "금요일입니다";
        break;
      case 6:
        resEle.innerHTML = "토요일입니다";
        break;
      case 7:
        resEle.innerHTML = "일요일입니다";
        break;
      default:
        resEle.innerHTML = "1~7 사이의 값을 입력하세요";
        break;
    }
  });
</script>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 초기 화면이 나타납니다.

자바스크립트 switch문의 엄격한 비교(===) 완벽 이해하기

숫자를 입력하고 ‘확인’ 버튼을 클릭하면, switch문이 항상 엄격한 비교를 수행하기 때문에 매번 default 문이 호출되는 것을 확인할 수 있습니다.

자바스크립트 switch문의 엄격한 비교(===) 완벽 이해하기

의도대로 동작하게 만들려면?

입력값이 case와 실제로 일치하도록 하려면 Number(dayVal.value) 또는 단항 연산자 +dayVal.value로 값을 숫자로 변환한 뒤 switch에 전달하거나, 반대로 case 라벨을 문자열(case "1":)로 작성하면 됩니다.