# Why does the logical OR operator in switch cases behave strangely?

Because it wasn't intended to be used this way.

|| returns its first operand if it's truthy, else its second operand.

3 || 4 returns 3 because 3 is truthy, therefore case will check only 3:

console.log(3 || 4); //3, because it is truthy
console.log(0 || 1); //1, because 0 is falsy

To make your code work, use separate cases, that fall through:

function testMyNumber(number) {
switch (number) {
case 6:
return number+" is 6";
case 3:
case 4:
return number+" is 3 or 4";

case 9:
case 10:
return number+" is 9 or 10";
default:
return number+" is not in 3,4,6,9,10";
}
};
console.log(testMyNumber(6));
console.log(testMyNumber(3));
console.log(testMyNumber(4));
console.log(testMyNumber(9));
console.log(testMyNumber(10));

Why 4 returns default case?

Because (3 || 4) is equal to 3, so case (3 || 4): is the same as writing case 3:.

You are using incorrect syntax. Write it like this:

case 3:
case 4:
return number + " is 3 or 4";