switch

This YouTube video was created by Steve Griffith.

The switch statement

The switch statementopen in new window is similar to the if...else statement, but instead of evaluating a condition, the switch statement contains different cases. Each case is evaluated to see if it matches the provided expression. A case will only match the expression if the case has the exact same values using the strict comparison (===) operator. If a case does match the expression, the associated block of code will be executed.

A break statement is used tell the program to jump out of switch statement and ignore the remaining cases. If a break statement is not used, then fall through will occur.


/* Let's do the same thing we were doing in the if...else examples using a switch statement.
With this new statement, we can include all the conditions in the same block of code.
*/

let productTotal = 30
const shippingFee = 15
let cartTotal
let discount = 0.05 * productTotal

switch (true) {
  case productTotal < 50:
    // this block of code will execute
    cartTotal = productTotal + shippingFee
    console.log('Cart Total is ' + cartTotal)
    break
  case productTotal >= 50:
    // this block of code will NOT execute
    cartTotal = productTotal
    console.log('Cart Total is ' + cartTotal)
    break
  case productTotal >= 100:
    // this block of code will NOT execute
    cartTotal = productTotal - discount
    console.log('Cart Total is ' + cartTotal)
}

NOTE

The expression for thisswitch statement is set to true because we are checking if each of these cases are true or false. See below for a generic switch statement syntax.

const answer = 'A'

switch(answer)
{
  case 'A':
    // This block of code WILL execute
    console.log('A is the correct answer.')
    break
  case 'B': 
    // This block of code will NOT execute
    console.log('B is the wrong answer.')
    break
  case 'C': 
    // This block of code will NOT execute
    console.log('C is the wrong answer.')
}

The break statement

In most cases, it is necessary to include a break at the end of a case. If a break statement is not used than fall through will occur and all remaining cases will executed. This is because once a switch encounters a matching case all remaining cases are also considered matches.

// Note that productTotal is $30
switch (true) {
  case productTotal < 50:
    // this block of code will execute
    cartTotal = productTotal + shippingFee
    console.log('Cart Total is ' + cartTotal)
    break
  case productTotal >= 50:
    // this block of code will ALSO execute
    cartTotal = productTotal
    console.log('Cart Total is ' + cartTotal)
    break
  case productTotal >= 100:
    // this block of code will ALSO execute
    cartTotal = productTotal - discount
    console.log('Cart Total is ' + cartTotal)
}

NOTE

There is no need to add a break at the end of the last case because the switch statement will stop executing anyway

When used properly, fall through can be used to make the code more efficient, by stacking cases together.

/* Our e-commerce example does not work in this case, so below is a generic example: */

const answer = 'C'

switch (answer) {
  case 'A':
  case 'B':
    // this block of code will execute
    console.log('This is the wrong answer')
    break
  case 'C':
    // this block of code will NOT execute
    console.log('This is the correct answer')
    break
}

The default clause

The default clause, similar to the else statement, is use to provide a default statement if no matching case is found.

NOTE

It is best practice to set the default clause as the last clause in a switch statement.

// Note that productTotal is $30
switch (true) {
  
  case productTotal >= 50:
    // this block of code will NOT execute
    cartTotal = productTotal
    console.log('Cart Total is ' + cartTotal)
    break

  case productTotal >= 100:
    // this block of code will NOT execute
    cartTotal = productTotal - discount
    console.log('Cart Total is ' + cartTotal)
    break

  default:
    // this block of code will execute
    cartTotal = productTotal + shippingFee
    console.log('Cart Total is ' + cartTotal)

}