Specifically w/r/t the broken logic in the first two lines of your switch:
switch (card) {
case (>= 2 & <= 6):
...
Switch says: take the value in the brackets (switch (card)), and if it matches a case, do the thing in that block.
So card is either a number between 1 and 10 inclusive, or ‘A’, ‘J’, ‘Q’ or ‘K’.
So assume it is 5.
switch (5) {
case (>= 2 & <= 6):
The case isn’t valid javascript (or any programming language). >= or <= expect a comparison. So 1 <= 2, x >= y, etc, something on both sides. Leaving off one side makes there’s no comparison, it can’t ever work, and you just get a syntax error. So I assume you mean:
switch (card) {
case (card >= 2 & card <= 6):
...
So if card is 5, then 5 >= 2 & 5 <= 6 is 1.
5 is not 1, so that branch does not run. This is because
5 >= 2 & 5 <= 6
is
true & true
is
1 & 1
which is 1 BITWISE_AND 1. Which is 1.
I assume you meant
switch (card) {
case (card >= 2 && card <= 6):
...
So again assuming card is 5, this evaluates to:
switch (5) {
case (5 >= 2 && 5 <= 6)
Which evaluates to
switch (5) {
case (true):
...
5 does not equal true, so that branch does not run. 5 equals 5, not true.
Edit: you can put logical operators in case statements but you need to remember that they evaluate to true or false. So if you want to do this (and this is not the point of this exercise, this is for future reference) you do not switch on card, you switch on true: if a case evaluates to true, run that branch:
switch (true) {
case card >= 2 && card <= 6:
// do stuff