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문이 항상 엄격한 비교를 수행하기 때문에 매번 default 문이 호출되는 것을 확인할 수 있습니다.

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