So This switch Statement Is Broken... Let’s Fix It
Understanding why "case age < 18" failed and the simple solution that fixed it.
I was working on some JavaScript logic with a friend and wrote this:
let age = 18
switch (age) {
case age < 13:
console.log("child")
break;
case age<18:
console.log("Teenager")
}
Oops. Didn’t work.
❓ So What’s the Problem?
Turns out that in JavaScript, switch uses strict equality (===). So:
The age is 18.
The expression age < 18 is evaluated before the switch statement runs, resulting in false.
So this is what the switch really sees:
let age = 26
switch (18) {
case false:
console.log("Child")
}
//That’s 18 === false, which… doesn’t compute 😅
🧠 The Fix — switch(true)
I wanted to clean up nested if...else blocks, and here’s the trick that finally made it click:
switch (true) {
case age < 13:
console.log("Child")
break
case age < 18:
console.log("Teenager")
break
default:
console.log("Adult")
}
Instead of comparing values, we flip the logic: "Which of these conditions is true?"
Here's what's really happening step-by-step:
let age = 26
switch (true) {
case age < 13:// true ===false => false
console.log("Child")
break
case age < 18: // true ===false => false
console.log("Teenager")
break
default:
console.log("Adult")
}
And boom—it works.
⚡ Use Cases( Price Tiers)
let spend = 2000
switch (true) {
case spend > 1000:
tier = "Gold"
break
case spend > 500:
tier = "Silver"
break
default:
tier = "Bronze"
}
🔍 Still Curious? MDN Has You Covered
Here's where you can learn the full rules of how switch statements and strict equality work in JavaScript.