Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Revision 896309 of switch

  • Revision slug: Web/JavaScript/Reference/Statements/switch
  • Revision title: switch
  • Revision id: 896309
  • Created:
  • Creator: AleCorrea
  • Is current revision? No
  • Comment Faltando traduzir os códigos de exemplo

Revision Content

{{jsSidebar("Statements")}}

O switch verifica uma expressão, caso o valor da expressão corresponda a uma condição, ele executa o código associado àquela condição.

Syntax

switch (expression) {
  case value1:
    //Statements executed when the result of expression matches value1
    [break;]
  case value2:
    //Statements executed the result of expression matches value2
    [break;]
  ...
  case valueN:
    //Statements executed when the result of expression matches valueN
    [break;]
  default:
    //Statements executed when none of the values match the value of the expression
    [break;]
}
expression
Uma expressão comparada a cada condição.
case valueN
Um case usado para comparar a expressão.
statementsN
Códigos executados se a expression for verdadeira comparada à condição.
statements_def
Códigos executados se a expression não corresponder à nenhuma condição.

Descrição

Se uma correspondência é encontrada, os códigos associados serão executados. Se mais de uma condição corresponder ao valor dado, apenas a primeira é selecionada, mesmo se as outras condições não forem iguais.

O Switch primeiro procura por uma condição case cuja expressão resulta no mesmo valor que a expressão de entrada (usando strict comparison, ===) e então transfere o controle para aquele case, executando os códigos associados. Se não houver combinações com o case, o switch procura pelo valor default(padrão), se encontrado, dá controle para aquele case, executando o código associado. Não havendo default, o case mais próximo ao fim do switch será executado. Por convenção, o default case é considerado a última condição, mesmo não precisando ser.

O break associado a cada case certifica que o switch pare quando uma correspondência for encontrada e continue no código após ele. Se não houver break, executará o próximo case sem validá-lo.

Exemplo

Usando o switch

No exemplo a seguir, se expr retornar "Bananas", o código combina com o valor do case "Bananas" e executa o código associado. Quando um break é achado, o programa sai do switch e executa o código que o segue. Se break for omitido, o código do case "Cherries" também será executado.

switch (expr) {
  case "Oranges":
    console.log("Oranges are $0.59 a pound.");
    break;
  case "Apples":
    console.log("Apples are $0.32 a pound.");
    break;
  case "Bananas":
    console.log("Bananas are $0.48 a pound.");
    break;
  case "Cherries":
    console.log("Cherries are $3.00 a pound.");
    break;
  case "Mangoes":
  case "Papayas":
    console.log("Mangoes and papayas are $2.79 a pound.");
    break;
  default:
    console.log("Sorry, we are out of " + expr + ".");
}

console.log("Is there anything else you'd like?");

O que acontece se eu esquecer do break?

Se você esquecer um break o script vai executar o case do critério encontrado, e também o caso após ele sem validá-lo. Veja o exemplo:

var foo = 0;
switch (foo) {
  case -1:
    console.log('negative 1');
    break;
  case 0: // foo is 0 so criteria met here so this block will run
    console.log(0)
    // NOTE: the forgotten break would have been here
  case 1: // no break statement in 'case 0:' so this case will run as well
    console.log(1);
    break; // it encounters this break so will not continue into 'case 2:'
  case 2:
    console.log(2);
    break;
  default:
    console.log('default');
}

Métodos para múltiplos casos

Esta técnica foi inspirada em:

Switch statement multiple cases in JavaScript (Stack Overflow)

Múltiplos casos - operação única

Este método toma vantagem do fato de que se não houver break abaixo de um case ele continuará a executar o próximo case de qualquer jeito, correspondendo ou não. Veja a seção com o título "O que acontece se eu esquecer do break?"

Este é um exemplo de um switch de uma única operação sequencial, onde quatro valores diferentes fazem exatamente o mesmo.

var Animal = 'Giraffe';
switch (Animal) {
  case 'Cow':
  case 'Giraffe':
  case 'Dog':
  case 'Pig':
    console.log('This animal will go on Noah\'s Ark.');
    break;
  case 'Dinosaur':
  default:
    console.log('This animal will not.');
}

Múltipls casos - operações encadeadas

Este é um exemplo de um switch sequencial multi-operacional, onde, dependendo do número dado, você receberá diferentes resultados. Mostra que ele irá analisar na ordem que você por os case statements, e não precisa ser numericamente sequencial. Em JavaScript, pode-se até mesclar strings nos cases também.

var foo = 1;
var output = 'Output: ';
switch (foo) {
  case 10:
    output += 'So ';
  case 1:
    output += 'What ';
    output += 'Is ';
  case 2:
    output += 'Your ';
  case 3:
    output += 'Name';
  case 4:
    output += '?';
    console.log(output);
    break;
  case 5:
    output += '!';
    console.log(output);
    break;
  default:
    console.log('Please pick a number from 0 to 6!');
}

Resultados deste exemplo:

Value Log text
foo is NaN or not 1, 2, 3, 4, 5 or 10 Please pick a number from 0 to 6!
10 Output: So What Is Your Name?
1 Output: What Is Your Name?
2 Output: Your Name?
3 Output: Name?
4 Output: ?
5 Output: !

Especificações

Specification Status Comment
{{SpecName('ES3')}} {{Spec2('ES3')}} Initial definition. Implemented in JavaScript 1.2
{{SpecName('ES5.1', '#sec-12.11', 'switch statement')}} {{Spec2('ES5.1')}}  
{{SpecName('ES6', '#sec-switch-statement', 'switch statement')}} {{Spec2('ES6')}}  

Compatibilidade de navegadores

{{CompatibilityTable}}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}

Veja também

Revision Source

<div>{{jsSidebar("Statements")}}</div>

<p>O <strong>switch</strong>&nbsp;verifica uma expressão, caso&nbsp;o valor da expressão corresponda a uma condição, ele executa o código associado àquela condição.</p>

<h2 id="Syntax">Syntax</h2>

<pre class="syntaxbox">
switch (expression) {
  case value1:
    //Statements executed when the result of expression matches value1
    [break;]
  case value2:
    //Statements executed the result of expression matches value2
    [break;]
  ...
  case valueN:
    //Statements executed when the result of expression matches valueN
    [break;]
  default:
    //Statements executed when none of the values match the value of the expression
    [break;]
}</pre>

<dl>
 <dt><code>expression</code></dt>
 <dd>Uma expressão comparada a&nbsp;cada condição.</dd>
 <dt><code>case valueN</code></dt>
 <dd>Um <code>case</code> usado para comparar a <code>expressão</code>.</dd>
 <dt><code>statementsN</code></dt>
 <dd>Códigos executados se a&nbsp;<code>expression</code> for verdadeira comparada à condição.</dd>
 <dt><code>statements_def</code></dt>
 <dd>Códigos executados se a&nbsp;<code>expression</code> não corresponder à nenhuma condição.</dd>
</dl>

<h2 id="Description">Descrição</h2>

<p>Se uma correspondência é encontrada, os códigos associados serão executados. Se mais de uma condição corresponder ao valor dado, apenas a <strong>primeira é selecionada</strong>, mesmo se as outras condições não forem iguais.</p>

<p>O <code>Switch</code> primeiro procura por uma condição&nbsp;<code>case</code>&nbsp;cuja expressão resulta no mesmo valor que a expressão de entrada (usando&nbsp;<a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">strict comparison</a>, <code>===)</code>&nbsp;e então transfere o controle para aquele&nbsp;<code>case</code>, executando os códigos associados. Se não houver combinações com o&nbsp;<code>case</code>, o switch procura pelo valor&nbsp;<code>default</code>(padrão), se encontrado, dá controle para aquele <code>case</code>, executando o código associado. Não havendo&nbsp;<code>default</code>, o <code>case&nbsp;</code>mais próximo ao fim do <code>switch&nbsp;</code>será executado. Por convenção, o <code>default</code> <code>case</code> é considerado a última condição, mesmo não precisando ser.</p>

<p>O <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/break" title="JavaScript/Reference/Statements/break">break</a></code> associado a&nbsp;cada <code>case</code>&nbsp;certifica que o switch&nbsp;<em>pare</em>&nbsp;quando uma correspondência for&nbsp;encontrada e continue no código após ele. Se não houver&nbsp;<code>break</code>, executará o próximo <code>case&nbsp;</code><strong>sem validá-lo</strong>.</p>

<h2 id="Examples">Exemplo</h2>

<h3 id="Using_switch">Usando o&nbsp;<code>switch</code></h3>

<p>No exemplo a seguir, se&nbsp;<code>expr</code>&nbsp;retornar "Bananas", o código combina com o valor do&nbsp;<code>case</code> "Bananas" e executa o código associado. Quando um&nbsp;<code>break</code> é achado, o programa sai do&nbsp;<code>switch</code>&nbsp;e executa o código que o segue. Se&nbsp;<code>break</code> for&nbsp;omitido, o código do <code>case</code> "Cherries" também será executado.</p>

<pre class="brush: js">
switch (expr) {
  case "Oranges":
    console.log("Oranges are $0.59 a pound.");
    break;
  case "Apples":
    console.log("Apples are $0.32 a pound.");
    break;
  case "Bananas":
    console.log("Bananas are $0.48 a pound.");
    break;
  case "Cherries":
    console.log("Cherries are $3.00 a pound.");
    break;
  case "Mangoes":
  case "Papayas":
    console.log("Mangoes and papayas are $2.79 a pound.");
    break;
  default:
    console.log("Sorry, we are out of " + expr + ".");
}

console.log("Is there anything else you'd like?");
</pre>

<h3 id="What_happens_if_I_forgot_a_break">O que acontece se eu esquecer do&nbsp;<code>break</code>?</h3>

<p>Se você esquecer um <code>break</code> o script vai executar o <code>case</code> do critério encontrado, e também o caso após ele sem validá-lo. Veja o exemplo:</p>

<pre class="brush: js">
var foo = 0;
switch (foo) {
  case -1:
&nbsp;   console.log('negative 1');
    break;
  case 0: // foo is 0 so criteria met here so this block will run
&nbsp;   console.log(0)
 &nbsp;&nbsp; // NOTE: the forgotten break would have been here
&nbsp; case 1: // no break statement in 'case 0:' so this case will run as well
&nbsp;   console.log(1);
&nbsp;&nbsp; &nbsp;break; // it encounters this break so will not continue into 'case 2:'
&nbsp; case 2:
&nbsp;   console.log(2);
&nbsp;&nbsp; &nbsp;break;
&nbsp; default:
    console.log('default');
}</pre>

<h3 id="Methods_for_multi-criteria_case">Métodos para&nbsp;múltiplos casos</h3>

<p>Esta técnica foi inspirada em:</p>

<p><a href="https://stackoverflow.com/questions/13207927/switch-statement-multiple-cases-in-javascript">Switch statement multiple cases in JavaScript (Stack Overflow)</a></p>

<h4 id="Multi-case_-_single_operation">Múltiplos casos&nbsp;- operação única</h4>

<p>Este método toma vantagem do fato de que se não houver&nbsp;<code>break</code> abaixo de um <code>case</code> ele continuará a executar o próximo <code>case </code>de qualquer jeito, correspondendo ou não. Veja a seção com o título "O que acontece se eu esquecer do&nbsp;<code>break</code>?"</p>

<p>Este é um exemplo de um switch de uma única operação sequencial, onde quatro valores diferentes fazem exatamente o mesmo.</p>

<pre class="brush: js">
var Animal = 'Giraffe';
switch (Animal) {
  case 'Cow':
&nbsp; case 'Giraffe':
&nbsp; case 'Dog':
&nbsp; case 'Pig':
&nbsp;   console.log('This animal will go on Noah\'s Ark.');
&nbsp;&nbsp; &nbsp;break;
  case 'Dinosaur':
&nbsp; default:
&nbsp;   console.log('This animal will not.');
}</pre>

<h4 id="Multi-case_-_chained_operations">Múltipls casos - operações encadeadas</h4>

<p>Este é um exemplo de um <strong>switch sequencial multi-operacional</strong>, onde, dependendo do número dado, você receberá diferentes resultados. Mostra que ele irá analisar na ordem que você por os&nbsp;<code>case statements</code>, e não precisa ser numericamente sequencial. Em JavaScript, pode-se até mesclar <code>strings</code> nos <code>cases</code> também.</p>

<pre class="brush: js">
var foo = 1;
var output = 'Output: ';
switch (foo) {
  case 10:
    output += 'So ';
&nbsp; case 1:
    output += 'What ';
    output += 'Is ';
&nbsp; case 2:
&nbsp;   output += 'Your ';
  case 3:
    output += 'Name';
  case 4:
    output += '?';
    console.log(output);
    break;
  case 5:
    output += '!';
    console.log(output);
    break;
&nbsp; default:
&nbsp;   console.log('Please pick a number from 0 to 6!');
}</pre>

<p>Resultados deste exemplo:</p>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Value</th>
   <th scope="col">Log text</th>
  </tr>
  <tr>
   <td>foo is NaN or not 1, 2, 3, 4, 5 or 10</td>
   <td>Please pick a number from 0 to 6!</td>
  </tr>
  <tr>
   <td>10</td>
   <td>Output: So What Is Your Name?</td>
  </tr>
  <tr>
   <td>1</td>
   <td>Output: What Is Your Name?</td>
  </tr>
  <tr>
   <td>2</td>
   <td>Output: Your Name?</td>
  </tr>
  <tr>
   <td>3</td>
   <td>Output: Name?</td>
  </tr>
  <tr>
   <td>4</td>
   <td>Output: ?</td>
  </tr>
  <tr>
   <td>5</td>
   <td>Output: !</td>
  </tr>
 </tbody>
</table>

<h2 id="Specifications">Especificações</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('ES3')}}</td>
   <td>{{Spec2('ES3')}}</td>
   <td>Initial definition. Implemented in JavaScript 1.2</td>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-12.11', 'switch statement')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-switch-statement', 'switch statement')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td>&nbsp;</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility">Compatibilidade de navegadores</h2>

<p>{{CompatibilityTable}}</p>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari</th>
  </tr>
  <tr>
   <td>Basic support</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Android</th>
   <th>Chrome for Android</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>Basic support</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<h2 id="See_also">Veja também</h2>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else"><code>if...else</code></a></li>
</ul>
Revert to this revision