Given the following, what do you think the console output will be?<p><pre><code> var x = 1;
switch (x) {
case 1:
console.log('case 1');
case 2:
console.log('case 2');
case 3:
console.log('case 3');
default:
console.log('default');
}
</code></pre>
Before you raise your hand, yes I've intentionally omitted the break statements.<p>And, the answer is:<p><pre><code> case 1
case 2
case 3
default
</code></pre>
The switch is designed to execute every case after the first match, which is the reason for placing a `break` after each case.<p>My assumption was always that the `break` was to avoid wasting the interpreter's time on checking the remaining cases when you knew they'd all be non-matches, not that `break` was basically required.<p>This means that the switch statement itself is basically useless without `break`, unless each case is ordered in a 1[2,[3,[4]]] fashion (I imagine that's quite rare).<p>Is this just an artifact taken from C, or is there something else I'm overlooking?
This is how switch statements work in a <i>lot</i> of curly-brace languages.<p>Intentional fall-through isn't as rare as you seem to think, though--not useless at all.