The comma operator (,) evaluates its operands, from left to right, and returns the second one. That’s useful in some situations, but
just wrong in a switch case. You may think you’re compactly handling multiple values in the case, but only the last one in
the comma-list will ever be handled. The rest will fall through to the default.
Similarly the logical OR operator (||) will not work in a switch case, only the first argument will be
considered at execution time.
switch (a) {
case 1,2: // Noncompliant; only 2 is ever handled by this case
doTheThing(a);
case 3 || 4: // Noncompliant; only '3' is handled
doThatThing(a);
case 5:
doTheOtherThing(a);
default:
console.log('Neener, neener!'); // this happens when a==1 or a == 4
}
switch (a) {
case 1:
case 2:
doTheThing(a);
case 3:
case 4:
doThatThing(a);
case 5:
doTheOtherThing(a);
default:
console.log('Neener, neener!');
}
The switch (true) pattern is a common programming practice to match against expressions rather than literals. Expressions in the
case clauses act as guards, i.e., they must evaluate to true if the execution is to continue in the branch.
function weekStatus (day) {
let status;
switch (true) {
case (day === 'MON' || day === 'TUE' || day === 'WED' || day === 'THU' || day === 'FRI'):
status = 'Weekday';
break;
case (day === 'SAT' || day === 'SUN'):
status = 'Weekend';
break;
}
return status;
}