---
description: JavaScript простым языком
---

# Знакомство с switch

[![Generic badge](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)

![](https://3367117456-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M8VRUyYIp5X-d6oGwV2%2F-M8VuMYHR2vJK1UrcSq3%2F-M8VufSBPe4w--tQoloQ%2Fimg-16.png?alt=media\&token=809ae954-cd69-4bb1-b980-b5f8949d69cd)

Сегодня расскажу о продвинутом операторе `if`, а именно о конструкции **`switch`**.

`if` и `switch` очень близки по своей сути, однако, в множестве случаев спора, кто лучше: тот или другой, победителем выйдет именно `switch`.

Теперь подробнее об этой конструкции. `switch`, фактически заменяет в коде несколько конструкций `if`, что, порой, позволяет избегать лишних проверок (соответственно, существенно сократить код).

Вся конструкция `switch` выглядит следующим образом:

```javascript
switch(arg) {
    case 1:
         // действия
    break;
    
    case 2:
        // действия 
    break;
    
    default:
        // действия
}
```

Теперь сразу же разберем на примере:

```javascript
let arg = 5;

switch(arg) {
    case 1:
        alert(‘Значение переменной arg равно 1’);
    break;

    case 3:
        alert(‘Значение переменной arg равно 3’);
    break;

    case 5:
        alert(‘Значение переменной arg равно 5’);
    break;

    default:
        alert(‘Значение переменной arg равно: ’ + arg);
}
```

Разберем код ([живой пример](https://repl.it/@JSstupid/switch)).

Мы определили переменную `arg` и записали в неё значение `5`.

Затем, эту переменную `arg` мы как бы “скармливаем” конструкции `switch`.

Конструкция берет значение переменной, которую ей скормили, и проверяет не совпадает ли это значение с одним из значений указанных в блоках `case`. Если значение совпадает с каким-либо значением указанным после ключевого слова `case`, то все действия выполнятся, которые указаны внутри этого блока `case`до оператора `break`. Оператор `break` говорит **JavaScript-у**, что нужно выйти из конструкции `switch`.

Т.к., значение переменной `arg` равно `5`, то выполнится код, который написан внутри последнего блока `case`, т.е. этот:

```javascript
alert(‘Значение переменной arg равно 5’);
```

Блок `default`, находящийся внизу конструкции `switch` является необязательным. Он служит для того, чтобы код внутри него выполнился в том случае, если значение переменной скормленной в `switch` не совпало ни с одним из значений, указанных в блоках `case`.

Т.е, если сейчас взять и поменять значение переменной `arg`, например, на `6`(в примере выше), то отработает блок `default`.

**Важные заметки:**

`switch` очень любит точность от программиста. Поэтому, если ты пишешь так:

```javascript
...
 case 3:
...
```

Это означает, что ты ожидаешь от переменной именно числового значения `3`, а не строки `'3'`. `switch` просто не отработает так, как ты от него того ожидаешь, если ты не будешь думать о типах данных при сравнении.

Второй момент: кроме того, что блок `default` является необязательным, в конце этого блока можно не писать оператор `break`, т.к. этот код находится в конце конструкции `switch`, а значит **JavaScript** так или иначе выйдет из этой конструкции.

#### **Домашнее задание** <a href="#toc_1" id="toc_1"></a>

Написать конструкцию `switch`, которая будет проверять сколько опыта получил ваш герой в игре, в зависимости от количества убитых врагов.

_Условия задачи:_

* За `1` врага ему начисляется `100` очков опыта
* За `3` врагов ему начисляется `400` очков
* За `5` врагов начисляется `700` очков
* За `10` врагов начисляется `1000` очков

Если же он набрал другое количество очков, то умножай количество убитых врагов на `100` очков.

Далее, запроси (с помощью функции `prompt`), сколько игрок убил врагов, а потом с помощью `alert` выведите игроку информацию о том, сколько очков опыта он заработал.
