Online Compiler logoOnline Compiler

JavaScript Tutorial

JavaScript switch Statement

Learn how to handle multiple exact value matches efficiently with switch statements. Master case and break for clean decision-making.

Why this matters

switch statements provide cleaner, more readable code when you need to compare one value against many possible exact matches. They're essential for menu systems, state machines, and value-based routing.

What is a switch Statement?

The switch statement provides an efficient way to handle multiple conditions that compare against the same value.

It's particularly useful when you have many possible values to check against a single variable, offering better readability than long else if chains.

Basic switch Statement

let day = "Monday";

switch (day) {
  case "Monday":
    console.log("Start of the work week");
    break;
  case "Friday":
    console.log("TGIF!");
    break;
  case "Saturday":
  case "Sunday":
    console.log("It's the weekend!");
    break;
  default:
    console.log("Regular workday");
}

The switch compares the value of 'day' against each case. Multiple cases can share the same code block.

switch Statement Syntax

The switch statement consists of a switch expression, case labels, and an optional default case.

Each case represents a possible value to match against the switch expression.

switch Statement Structure

switch (expression) {
  case value1:
    // code to execute if expression === value1
    break;
  case value2:
    // code to execute if expression === value2
    break;
  default:
    // code to execute if no cases match
}

The break statement prevents fall-through to the next case. The default case handles unmatched values.

The break Statement

The break statement is crucial in switch statements. Without it, execution continues to the next case (fall-through).

This can be intentional for grouping cases, but is usually a bug if unintended.

break Prevents Fall-through

let grade = "B";

switch (grade) {
  case "A":
    console.log("Excellent!");
    break; // Stops here
  case "B":
    console.log("Good job!");
    break; // Stops here
  case "C":
    console.log("Satisfactory");
    break;
  default:
    console.log("Needs improvement");
}

Each break statement exits the switch block, preventing execution of subsequent cases.

Intentional Fall-through

let month = 1;

switch (month) {
  case 12:
  case 1:
  case 2:
    console.log("Winter season");
    break;
  case 3:
  case 4:
  case 5:
    console.log("Spring season");
    break;
  // ... more cases
}

Multiple cases can share the same code block by omitting break statements between them.

Real-World Examples

switch statements are commonly used for menu handling, state management, and categorization based on exact values.

Menu Selection Handler

function handleMenuSelection(choice) {
  switch (choice) {
    case "save":
      saveDocument();
      break;
    case "open":
      openFileDialog();
      break;
    case "print":
      printDocument();
      break;
    case "exit":
      confirmExit();
      break;
    default:
      showError("Unknown menu option");
  }
}

handleMenuSelection("save"); // Calls saveDocument()

Handle different menu options with clean, readable code.

HTTP Status Code Handler

function getStatusMessage(statusCode) {
  switch (statusCode) {
    case 200:
      return "OK - Request successful";
    case 201:
      return "Created - Resource created";
    case 400:
      return "Bad Request - Invalid input";
    case 401:
      return "Unauthorized - Authentication required";
    case 404:
      return "Not Found - Resource doesn't exist";
    case 500:
      return "Internal Server Error";
    default:
      return "Unknown status code";
  }
}

console.log(getStatusMessage(404)); // "Not Found - Resource doesn't exist"

Map status codes to human-readable messages efficiently.

Calculator Operations

function calculate(num1, num2, operation) {
  switch (operation) {
    case "+":
      return num1 + num2;
    case "-":
      return num1 - num2;
    case "*":
      return num1 * num2;
    case "/":
      return num2 !== 0 ? num1 / num2 : "Division by zero!";
    default:
      return "Invalid operation";
  }
}

console.log(calculate(10, 5, "+")); // 15
console.log(calculate(10, 0, "/")); // "Division by zero!"

Implement calculator logic with different operations based on operator symbols.

switch vs if...else Comparison

Both switch and else if can handle multiple conditions, but they serve different purposes.

  • Use switch for exact value matching against a single variable
  • Use else if for ranges, complex conditions, or different variables
  • switch is more readable for many exact value comparisons
  • else if is more flexible for complex logic

When to Use switch

// Better with switch - exact value matching
let day = "Monday";
switch (day) {
  case "Monday": console.log("Blue"); break;
  case "Tuesday": console.log("Red"); break;
  case "Wednesday": console.log("Green"); break;
  // ... more exact matches
}

switch excels when comparing one variable against many exact values.

When to Use else if

// Better with else if - ranges and complex conditions
let score = 85;
if (score >= 90) console.log("A");
else if (score >= 80) console.log("B");
else if (score >= 70) console.log("C");
// Ranges work better with else if

else if handles ranges and complex boolean expressions more naturally.

Best Practices

Following best practices makes switch statements more maintainable and less error-prone.

  • Always use break statements unless intentional fall-through
  • Include a default case to handle unexpected values
  • Keep case blocks simple - extract complex logic to functions
  • Use consistent formatting and indentation
  • Consider object lookup for simple value mapping
  • Add comments for fall-through cases

Object Lookup Alternative

// For simple value mapping, consider objects:
const statusMessages = {
  200: "OK",
  201: "Created",
  400: "Bad Request",
  404: "Not Found",
  500: "Internal Server Error"
};

function getStatusMessage(code) {
  return statusMessages[code] || "Unknown status";
}

// Instead of a long switch statement

For simple key-value mappings, object lookup can be more concise than switch.

Common Mistakes

  • Forgetting break statements: Always add break after each case unless you intentionally want fall-through behavior.
  • No default case: Include a default case to handle unexpected values gracefully.
  • Using switch for ranges: Use else if statements for range comparisons instead of switch.

Frequently Asked Questions

When should I use switch instead of else if?

Use switch when comparing one variable against many exact values. Use else if for ranges or complex conditions.

What happens if I forget the break statement?

Execution continues to the next case (fall-through), which is usually unintended and causes bugs.

Can switch work with strings?

Yes, switch works with strings, numbers, and other primitive types that can be compared with ===.