--- title: switch slug: Web/JavaScript/Reference/Statements/switch tags: - JavaScript - Statement translation_of: Web/JavaScript/Reference/Statements/switch --- <div>{{jsSidebar("Statements")}}</div> <h2 id="Сводка">Сводка</h2> <p><strong>Инструкция switch</strong> сравнивает выражение со случаями, перечисленными <font face="Courier New, Andale Mono, monospace">внутри неё</font>, а затем выполняет соответствующие инструкции.</p> <h2 id="Syntax">Синтаксис</h2> <pre class="syntaxbox">switch (expression) { case value1: //Здесь выполняются инструкции, если результат выражения равен value1 [break;] case value2: //Инструкции, соответствующие value2 [break;] ... case valueN: //Инструкции, соответствующие значению valueN //statementsN [break;] default: //Здесь находятся инструкции, которые выполняются при отсутствии соответствующего значения //statements_def [break;] }</pre> <dl> <dt><code>expression</code></dt> <dd>Выражение, значение которого сравнивается со всеми случаями.</dd> <dt><code>case valueN</code></dt> <dd>Случай, который проверяется на соответствие выражению (<code>expression</code>).</dd> <dt><code>statementsN</code></dt> <dd>Инструкции, которые выполняются, если <code>expression</code> соответствуют случаю.</dd> <dt><code>statements_def</code></dt> <dd>Инструкции, выполняемые если <code>expression</code> не соответствует ни одному случаю.</dd> </dl> <h2 id="Description">Описание</h2> <p>Если выражение соответствует какому-то случаю, то выполняются инструкции этого случая. Если несколько случаев соответствуют значению, только первый случай будет использован.</p> <p>Сначала программа пытается найти подходящий случай, значение которого равно значению искомого выражения (используется <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">строгое сравнение</a>, <code>===)</code> и затем выполняет инструкции, соответствующие случаю. Если подходящего случая нет, ищется случай по умолчанию (<code>default</code>), который не является обязательным. Если случая по умолчанию нет, выполнение продолжается на инструкции, следующей сразу после <code>switch</code>. По соглашению, случай <code>default</code> описывается последним, но это не является строгим правилом.</p> <p>Опциональная инструкция <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/break" title="JavaScript/Reference/Statements/break">break</a></code> выполняет выход из блока <code>switch</code>. Она может располагаться в каждом из случаев, но не является обязательной. Если её нет, то выполняется следующая инструкция из блока <code>switch</code>.</p> <h2 id="Examples">Примеры</h2> <h3 id="Example_Using_switch">Пример: Использование <code>switch</code></h3> <p>В этом примере, если <code>expr</code> равно "Bananas", программа находит случай "Bananas" и выполняет соответствующие инструкции. При выполнении инструкции <code>break</code>, выполнение продолжится за пределами <code>switch</code>. Если бы <code>break</code> не было, то выполнились бы инструкции случая "Cherries".</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">Пример: Что случится, если не использовать break?</h3> <p>Если вы не использовали инструкцию <code>break</code>, то будут выполнены инструкции следующего случая. И проверка на соответствие выражению не будет выполняться.</p> <pre class="brush: js">var foo = 0; switch (foo) { case -1: console.log('negative 1'); break; case 0: // foo равно 0, случай соответствует выражению и эти инструкции будут выполнены console.log(0) // ПРИМЕЧАНИЕ: здесь могла находиться забытая инструкция break case 1: // В случае 'case 0:' не было break, инструкции данного случая также будут выполнены console.log(1); break; // В конце расположен break, поэтому выполнение не перейдёт к случаю 'case 2:' case 2: console.log(2); break; default: console.log('default'); }</pre> <h3 id="Methods_for_Multi-criteria_Case">Цепочки case</h3> <h4 id="Одна_операция">Одна операция</h4> <p> Этот метод использует тот факт, что после <code>case</code> нет прерывания и продолжится выполнение следующего <code>case</code> независимо от того, соответствует ли <code>case</code> предоставленному условию. Подробнее в примере "Что случится, если не использовать break?. </p> <p> Это пример <code>case</code> с одной операцией, где четыре разных значения отрабатывают одинаково. </p> <pre class="brush: js">var Animal = 'Giraffe'; switch (Animal) { case 'Cow': case 'Giraffe': case 'Dog': case 'Pig': console.log('This animal is not extinct.'); break; case 'Dinosaur': default: console.log('This animal is extinct.'); }</pre> <h4 id="Цепочка_операций">Цепочка операций</h4> <p> Это пример множественных операций внутри <code>case</code>, где в зависимости от предоставленного числа можно увидеть разный вывод. Здесь показывается, что операции отрабатывают в том порядке, в котором расположены <code>case</code>. При этом числовая последовательность может не соблюдаться. Также возможно примешать в <code>case</code> строки. </p> <pre class="brush: js">var foo = 1; var output = 'Output: '; switch (foo) { case 0: 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 5!'); }</pre> Вывод этого примера: <table> <tr> <th>Значение</th> <th>Лог</th> </tr> <tr><td>`foo` is `NaN` or not `1`, `2`, `3`, `4`, `5`, or `0`</td><td>Please pick a number from 0 to 5!</td></tr> <tr><td>`0`</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> </table> <h2 id="Спецификации">Спецификации</h2> {{Specifications}} <h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2> <p>{{Compat}}</p> <h2 id="See_also">Смотрите также</h2> <ul> <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/if...else" lang="ru"><code>if...else</code></a></li> </ul>