JavaScript switch: rótulos case e fallback default

A instrução switch do JavaScript avalia uma expressão uma vez e direciona a execução para um rótulo case correspondente usando igualdade estrita (===). Use-a para substituir cadeias de if...else quando cada ramificação testa a mesma variável contra valores discretos, como despacho de comandos, mapeamento de status ou tratamento de opções fixas. O switch agrupa esse fluxo de controle baseado em valor em um único bloco, com comportamento de fall-through explícito e controlado por break.

Exemplo de JavaScript Switch para roteamento por valor

Saída:

A saída aparecerá aqui...

Saída:

Salvando arquivo

Como este exemplo funciona

  1. switch (comando) avalia comando uma vez e compara o resultado com cada rótulo case do JavaScript na ordem do código.
  2. O case "salvar" corresponde, então a execução salta para essa ramificação e executa console.log("Salvando arquivo").
  3. break sai do bloco switch. Sem ele, a execução segue para o próximo corpo de case, independentemente de o rótulo corresponder.
  4. default funciona como caso geral: roda quando nenhum rótulo case corresponde. Não é necessário break após default quando ele aparece por último.

Em uma instrução case do JavaScript como case "salvar":, o rótulo é um valor para correspondência, não uma condição booleana separada.

Erros comuns em JavaScript switch case

Esquecer o break: Sem ele, a execução cai em todos os corpos de case subsequentes. Omita break apenas ao agrupar casos de forma intencional.

const comando = "salvar";

switch (comando) {
  // Errado: exibe as duas mensagens quando comando é "salvar"
  case "salvar":
    console.log("Salvando");
  case "fechar":
    console.log("Fechando");
}

Misturar tipos nos rótulos case: O switch usa ===, então "2" nunca corresponde a 2. Converta a expressão para um tipo consistente antes do switch.

Reutilizar let/const entre casos: Todos os casos compartilham o escopo do bloco switch. Dois casos que declaram let resultado causam SyntaxError; envolva cada case em { } para criar escopos léxicos separados.

switch vs if…else

Use switch quando…Use if...else quando…
Comparar uma expressão com vários valores fixosAs condições envolvem intervalos, desigualdades ou variáveis diferentes
Vários casos compartilham o mesmo manipulador via fall-throughCada ramificação tem lógica composta e independente

Para mapeamentos grandes de valor para ação, uma busca em objeto pode ser mais limpa que as duas abordagens. Trate chaves ausentes para não chamar undefined como função.

Mais exemplos

Agrupe vários rótulos case para compartilhar um único manipulador:

const dia = "Sáb";
switch (dia) {
  case "Sáb":
  case "Dom":
    console.log("Fim de semana");
    break;
  default:
    console.log("Dia útil");
}

Empilhar rótulos case sem break entre eles direciona todos os valores listados para o mesmo bloco. Mantenha o manipulador compartilhado curto e finalize com break, return ou throw para evitar executar casos posteriores por acidente. Se precisar de um comportamento diferente por rótulo, evite fall-through e dê a cada case seu próprio corpo e saída.

FAQ

JavaScript switch usa == ou ===?

switch compara com igualdade estrita (===). Não ocorre coerção de tipo, então 0 não corresponde a "0" e null não corresponde a undefined. Garanta que a expressão e os rótulos case compartilhem o mesmo tipo.

O que acontece se você omitir break em um case do switch?

A execução cai no corpo do próximo case, independentemente do rótulo. Isso continua até encontrar break, return ou o fim do bloco switch. O fall-through intencional é usado para agrupar vários rótulos case sob o mesmo manipulador.

default pode aparecer antes de outros cases?

Sim. default pode ser colocado em qualquer ponto do bloco switch. Ele ainda roda apenas quando nenhum case corresponde, e a execução continua a partir dali; portanto, adicione break após default, a menos que ele seja a última cláusula.