1. Introduction
The switch statement is an alternative to long if / else if chains when you need to compare a single value against many possible exact matches. It evaluates an expression once and then jumps to the case clause whose value matches, making multi-branch logic based on discrete values (like a day of the week, a status code, or a menu option) easier to read.
Cricket analogy: A switch statement is like a scorer checking today's fixture code once and jumping straight to Virat Kohli's match report instead of asking is it Kohli, is it Rohit, is it Dhoni one by one.
Unlike if-else, which can test arbitrary boolean conditions, switch is designed around comparing one expression to a set of candidate values using strict equality (===). This makes it well-suited for enumerated or fixed sets of cases, but less flexible than if-else for range checks or compound conditions.
Cricket analogy: Unlike an if-else chain that could check 'is the run rate above 8 AND wickets under 3', switch only checks if the over count exactly equals 10, 20, or 50 — great for fixed formats, bad for compound conditions.
2. Syntax
switch (expression) {
case value1:
// runs if expression === value1
break;
case value2:
// runs if expression === value2
break;
case value3:
case value4:
// runs if expression === value3 OR expression === value4 (grouped cases)
break;
default:
// runs if no case matched
}3. Explanation
switch compares the switch expression to each case value using strict equality (===), meaning both type and value must match — there is no type coercion, unlike the loose equality (==) operator. So switch (5) will not match case '5':, because 5 (number) !== '5' (string).
Cricket analogy: switch compares strictly, so if the scoreboard stores the over number as 20 (a number), a case labeled '20' (a string jersey number) won't match — type and value both must agree, just like a fixture number must match exactly.
Execution begins at the matching case label and then continues sequentially through the following case blocks unless a break statement (or return, in a function) stops it. This behavior is called 'fall-through'. Fall-through can be used intentionally to group multiple cases together, as shown with case value3 / case value4 above, but if a break is accidentally omitted, execution silently continues into the next case's code, which is a very common source of bugs.
Cricket analogy: Fall-through means once execution matches Six it keeps running through the Four and Single scoring code too unless a break stops it — useful to group boundary cases together, but a forgotten break silently double-counts runs.
switch uses strict === comparison, so type mismatches never match. Also, every case block should end with break (or return/throw) unless fall-through is deliberate — forgetting break causes execution to 'fall through' into the next case, running code that was not intended to run. The default clause, if present, catches any value that did not match a case, but it does not have to be written last (though that is the convention); without a trailing break on default followed by more cases, fall-through rules still apply.
4. Example
function describeDay(day) {
switch (day) {
case 'Sat':
case 'Sun':
return 'Weekend';
case 'Mon':
case 'Tue':
case 'Wed':
case 'Thu':
case 'Fri':
return 'Weekday';
default:
return 'Unknown day';
}
}
console.log(describeDay('Sun'));
console.log(describeDay('Wed'));
console.log(describeDay('Xyz'));
// Demonstrating strict comparison: no match because of type mismatch
const value = 5;
switch (value) {
case '5':
console.log('matched string 5');
break;
case 5:
console.log('matched number 5');
break;
default:
console.log('no match');
}5. Output
Weekend
Weekday
Unknown day
matched number 56. Key Takeaways
- switch compares an expression to case values using strict equality (===), so types must match exactly.
- Each case should end with break, return, or throw to prevent unintended fall-through into the next case.
- Grouping multiple case labels together with no code between them is a valid way to share one block for several values.
- The default clause runs when no case matches; it is commonly placed last but is not required to be.
- switch is best for a fixed set of exact-value comparisons; if-else is better for ranges or compound boolean logic.
Practice what you learned
1. What comparison operator does switch use to match case values against the switch expression?
2. What happens if a case block does not include a break statement?
3. Given `switch (10) { case '10': console.log('a'); break; default: console.log('b'); }`, what is printed?
4. How can you make two different case values share the exact same code block?
5. Where must the default clause be placed in a switch statement?
Was this page helpful?
You May Also Like
if-else in JavaScript
Learn how to make decisions in JavaScript using if, else if, and else statements, and understand how truthy/falsy values control branching.
for Loop in JavaScript
Master the classic for loop along with for...in and for...of, and understand the key differences between iterating indexes, keys, and values.
break and continue in JavaScript
Learn how to alter loop execution with break and continue, and how labeled statements let you control outer loops from inside nested loops.
Operators in JavaScript
Survey JavaScript's arithmetic, comparison, logical, and ternary operators and how they behave with type coercion.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics