switch
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
Сводка
ÐнÑÑÑÑкÑÐ¸Ñ 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");
}
ЦепоÑки case
Ðдна опеÑаÑиÑ
ÐÑÐ¾Ñ Ð¼ÐµÑод иÑполÑзÑÐµÑ ÑÐ¾Ñ ÑакÑ, ÑÑо поÑле case Ð½ÐµÑ Ð¿ÑеÑÑÐ²Ð°Ð½Ð¸Ñ Ð¸ пÑодолжиÑÑÑ
вÑполнение ÑледÑÑÑего case незавиÑимо Ð¾Ñ Ñого, ÑооÑвеÑÑÑвÑÐµÑ Ð»Ð¸ case
пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ ÑÑловиÑ. ÐодÑобнее в пÑимеÑе "ЧÑо ÑлÑÑиÑÑÑ, еÑли не иÑполÑзоваÑÑ break?.
ÐÑо пÑÐ¸Ð¼ÐµÑ case Ñ Ð¾Ð´Ð½Ð¾Ð¹ опеÑаÑией, где ÑеÑÑÑе ÑазнÑÑ
знаÑÐµÐ½Ð¸Ñ Ð¾ÑÑабаÑÑваÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾.
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.");
}
ЦепоÑка опеÑаÑий
ÐÑо пÑÐ¸Ð¼ÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑвеннÑÑ
опеÑаÑий внÑÑÑи case, где в завиÑимоÑÑи оÑ
пÑедоÑÑавленного ÑиÑла можно ÑвидеÑÑ ÑазнÑй вÑвод. ÐдеÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑÑÑ, ÑÑо опеÑаÑии
оÑÑабаÑÑваÑÑ Ð² Ñом поÑÑдке, в коÑоÑом ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ñ case. ÐÑи ÑÑом
ÑиÑÐ»Ð¾Ð²Ð°Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑоблÑдаÑÑÑÑ. Также возможно пÑимеÑаÑÑ Ð²
case ÑÑÑоки.
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!");
}
ÐÑвод ÑÑого пÑимеÑа:
| ÐнаÑение | Ðог |
|---|---|
foo is NaN or not 1, 2, 3, 4, 5, or 0 |
Please pick a number from 0 to 5! |
0 |
Output: So What Is Your Name? |
1 |
Output: What Is Your Name? |
2 |
Output: Your Name? |
3 |
Output: Name? |
4 |
Output: ? |
5 |
Output: ! |
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-switch-statement> |