From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../reference/statements/switch/index.html | 184 +++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 files/ru/web/javascript/reference/statements/switch/index.html (limited to 'files/ru/web/javascript/reference/statements/switch') diff --git a/files/ru/web/javascript/reference/statements/switch/index.html b/files/ru/web/javascript/reference/statements/switch/index.html new file mode 100644 index 0000000000..5d0ead0986 --- /dev/null +++ b/files/ru/web/javascript/reference/statements/switch/index.html @@ -0,0 +1,184 @@ +--- +title: switch +slug: Web/JavaScript/Reference/Statements/switch +tags: + - JavaScript + - Statement +translation_of: Web/JavaScript/Reference/Statements/switch +--- +
{{jsSidebar("Statements")}}
+ +

Сводка

+ +

Инструкция switch сравнивает выражение со случаями, перечисленными внутри неё, а затем выполняет соответствующие инструкции.

+ +

Синтаксис

+ +
switch (expression) {
+  case value1:
+    //Здесь выполняются инструкции, если результат выражения равен value1
+    [break;]
+  case value2:
+    //Инструкции, соответствующие value2
+    [break;]
+  ...
+  case valueN:
+    //Инструкции, соответствующие значению valueN
+    //statementsN
+    [break;]
+  default:
+    //Здесь находятся инструкции, которые выполняются при отсутствии соответствующего значения
+    //statements_def
+    [break;]
+}
+ +
+
expression
+
Выражение, значение которого сравнивается со всеми случаями.
+
case valueN
+
Случай, который проверяется на соответствие выражению (expression).
+
statementsN
+
Инструкции, которые выполняются, если expression соответствуют случаю.
+
statements_def
+
Инструкции, выполняемые если expression не соответствует ни одному случаю.
+
+ +

Описание

+ +

Если выражение соответствует какому-то случаю, то выполняются инструкции этого случая. Если несколько случаев соответствуют значению, только первый случай будет использован.

+ +

Сначала программа пытается найти подходящий случай, значение которого равно значению искомого выражения (используется строгое сравнение, ===) и затем выполняет инструкции, соответствующие случаю. Если подходящего случая нет, ищется случай по умолчанию (default), который не является обязательным. Если случая по умолчанию нет, выполнение продолжается на инструкции, следующей сразу после switch. По соглашению, случай default описывается последним, но это не является строгим правилом.

+ +

Опциональная инструкция break выполняет выход из блока switch. Она может располагаться в каждом из случаев, но не является обязательной. Если её нет, то выполняется следующая инструкция из блока switch.

+ +

Примеры

+ +

Пример: Использование switch

+ +

В этом примере, если expr равно "Bananas", программа находит случай "Bananas" и выполняет соответствующие инструкции. При выполнении инструкции break, выполнение продолжится за пределами switch. Если бы break не было, то выполнились бы инструкции случая "Cherries".

+ +
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?");
+
+ +

Пример: Что случится, если не использовать break?

+ +

Если вы не использовали инструкцию break, то будут выполнены инструкции следующего случая. И проверка на соответствие выражению не будет выполняться.

+ +
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');
+}
+ +

Пример: Использование нескольких значений для одного случая

+ +

Если вы хотите использовать один набор инструкций для соответствия нескольким случаям, можно использовать два способа. Первый способ является рекомендуемым, а второй - скорее трюком. Оба способа вызовут предупреждение с текстом "yes", если значение foo равно 0, 1, 2 или 3.

+ +

Исходники этих способов здесь:

+ +
    +
  1. Switch statement multiple cases in JavaScript (Stack Overflow)
  2. +
  3. Multiple Criteria Single Case Switch Statement (Stack Overflow)
  4. +
+ +

Первый способ

+ +

В первом способе используется то, что выполнение инструкции switch продолжится, если не использовать инструкцию break. Подробнее в примере "Что случится, если не использовать break?"

+ +
var foo = 1;
+switch (foo) {
+    case 0:
+    case 1:
+    case 2:
+    case 3:
+        alert('yes');
+        break;
+    default:
+        alert('not');
+}
+ +

Второй способ

+ +

Другой способ, менее стандартный; во второй строке, где вы ожидали увидеть switch(foo), расположено постоянное значение true, и в случаях используются выражения вместо констант:

+ +
var foo = 1;
+switch (true) { // Постоянное значение true вместо foo
+    case foo >= 0 && foo <= 3:
+        alert('yes');
+        break;
+    default:
+        alert('not');
+}
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарии
ECMAScript 3-е Издание.СтандартИзначальное определение.
+ Реализован в JavaScript 1.2
{{SpecName('ES5.1', '#sec-12.11', 'Инструкция switch')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-switch-statement', 'Инструкция switch')}}{{Spec2('ES6')}}
+ +

Совместимость с браузерами

+ + + +

{{Compat("javascript.statements.switch")}}

+ +

Смотрите также

+ + -- cgit v1.2.3-54-g00ecf