Asher Cohen
Back to posts

Conditional Branching Patterns in JavaScript

Master the art of writing clear, maintainable conditional logic in JavaScript

Introduction

Conditional branching is fundamental to programming. How we structure our conditions directly impacts code readability and maintainability. JavaScript offers multiple approaches—each with its place.

The Three Main Patterns

Switch Statements

Switch statements excel when you have multiple discrete values to check against a single expression.

function getDayName(dayNumber) {
  switch (dayNumber) {
    case 1:
      return 'Monday';
    case 2:
      return 'Tuesday';
    case 3:
      return 'Wednesday';
    default:
      return 'Invalid day';
  }
}

When to use:

  • Multiple conditions checking the same variable
  • Clear, discrete values
  • More than 3-4 conditions

If/Else If/Else Chains

The most flexible conditional pattern, suitable for complex conditions and ranges.

function getGrade(score) {
  if (score >= 90) {
    return 'A';
  } else if (score >= 80) {
    return 'B';
  } else if (score >= 70) {
    return 'C';
  } else {
    return 'F';
  }
}

When to use:

  • Complex conditions with multiple variables
  • Range checks
  • Boolean logic combinations

Ternary Operator

Concise conditional expressions for simple true/false decisions.

const status = isLoggedIn ? 'active' : 'inactive';

When to use:

  • Simple binary decisions
  • Assigning values based on conditions
  • Keeping expressions compact

When NOT to use:

  • Nested ternaries (hard to read)
  • Complex logic (use if/else instead)
  • Side effects (use if/else for clarity)

Best Practices

Early Returns

Use guard clauses to reduce nesting and improve readability.

// Instead of this:
function processUser(user) {
  if (user) {
    if (user.isActive) {
      // process
    }
  }
}

// Do this:
function processUser(user) {
  if (!user) return;
  if (!user.isActive) return;
  // process
}

Avoid Deep Nesting

Deeply nested conditionals are hard to follow. Refactor using:

  • Early returns
  • Extracting functions
  • Boolean flags

Consistent Ordering

Order conditions logically:

  • Most likely first (for performance)
  • Simplest first (for clarity)
  • Ascending/descending order (for ranges)

Common Pitfalls

  • Over-using ternaries: They're not always clearer
  • Deep nesting: Sign of needed refactoring
  • Duplicate conditions: Violates DRY principle
  • Magic numbers: Use named constants in conditions

Conclusion

Choose the conditional pattern that makes your intent clearest. Readability trumps cleverness every time.

#javascript #clean-code #programming