Javascript.RU

switch

Сравнивает значение выражения с различными вариантами и при совпадении выполняет соответствующий код

Синтаксис

switch (expression) {
   case label1:
      statements1
      [break]
   case label2:
      statements2
      [break]
   ...
   case labelN:
      statementsN
      [break]
   default:
      statements_def
      [break]
}

Аргументы

expression
Выражение для сравнения
labelN
Значение, с которым сравнивать
statementsN
Ветка кода, на которую перейдет управление при совпадении expression с labelN
statements_def
Ветка кода, которая будет выполнена, если expression не совпадет ни с одним значением labelN

Описание, примеры

Конструкция switch служит для сравнения значения на равенство с различными вариантами.

При этом равенство подразумевается в смысле оператора "===", сравнивать с регулярным выражением или как-то еще switch не умеет.

Если совпадение найдено, то соответствующий код исполняется до оператора break, который прекращает выполнение switch и передает управление дальше.

Пример: обычное применение switch
var a = 2+2
switch (a) {
  case 3:
    alert('Маловато')
    break
  case 4:
    alert('В точку!')
    break
  case 5:
    alert('Перебор')
    break
  default:
    alert('Я таких значений не знаю')
}

Если оператор break отсутствует, то выполнение продолжается дальше.

Например, предыдущий пример без break:

Пример: switch без break
var a = 2+2
switch (a) {
  case 3:
    alert('Маловато')
  case 4:
    alert('В точку!')
  case 5:
    alert('Перебор')
  default:
    alert('Я таких значений не знаю')
}

При a=4 последовательно будут выполнены операторы:

alert('В точку!')

alert('Перебор')

alert('Я таких значений не знаю')

Несколько значений case можно группировать.

Пример: группировка case
var a = 2+2
switch (a) {
  case 4:
    alert('Верно!')
    break
  case 3:
  case 5:
    alert('Неверно!')
    break
  default:
    alert('Я таких значений не знаю')
}

Автор: Гость (не зарегистрирован), дата: 16 марта, 2010 - 05:24
#permalink

У меня не работает что-то. Причем по-моему уже второй раз пробую этот код отсюда.

<script type="text/javascript">
$(document).ready(function() {
$("#div").change(function(){
id = $('select#div').val();
switch (id) {
  case test:
    alert('test')
    break
  case megatest:
    alert('megatest')
    break
  default:
    alert('Я таких значений не знаю')
}
});
});
</script>

Автор: Гость (не зарегистрирован), дата: 5 мая, 2011 - 03:55
#permalink

в кавычки заключи значения, с которыми сравниваешь кейсами, вот так:
... case 'test': ...
... case 'megatest': ...
иначе у тебя test и megatest в кейсах воспринимаются как переменные и их содержимое не равно тому, что у тебя находится в id


Автор: Гость (не зарегистрирован), дата: 12 декабря, 2013 - 21:13
#permalink

обведи то, что идёт после case в кавычки.
например:

case 'test':
alert('test')
break
case 'megatest':
alert('megatest')
break
default:
alert('Я таких значений не знаю')


Автор: Гость (не зарегистрирован), дата: 17 марта, 2010 - 22:43
#permalink

Может стоит писать вместо
case test:
с кавычками?
case "test":


Автор: Гость (не зарегистрирован), дата: 18 октября, 2010 - 17:08
#permalink

Из статьи неясно, может ли применяться данный оператор для строковых данных.
В Си, Си++ данный оператор применим только для порядковых типов данных.
Всё же это язык "среднего уровня".
На языке же высокого уровня (пример PHP) данный оператор может применяться и для строковых данных.

Попробовал запустить в JS, ответ неоднозначен: с одной стороны ошибка не генерится, с другой, работает оператор непредсказуемо.


Автор: Гость (не зарегистрирован), дата: 27 апреля, 2011 - 14:10
#permalink

Всё же это язык "среднего уровня".

Аргументируем, не стесняемся!

Т.е JS - язык "среднего уровня", а PHP - язык "высокого уровня"? Я не хочу холиварить, оскорблять "язык для персональных страничек", но сам факт такого высказывания показывает, что автор не знает ни JS, ни PHP.

Тот факт, что JS менее "нагружен", чем сишки \ кресты \ жаба \ питон лишь указывает на более полную свободу в выборе решения, чем в вышеперечисленных.


Автор: Гость (не зарегистрирован), дата: 3 мая, 2011 - 09:42
#permalink

Да, не -- я думаю, что "язык среднего" уровня относился к C и C++
по сравнению с JS и PHP это можно считать справедливым.
Хотя на самом деле все указанные языки являются языками высокого уровня.

Языком среднего уровня условно можно считать байт-код Java и управляемый код .Net


Автор: Гость (не зарегистрирован), дата: 29 августа, 2015 - 20:47
#permalink

+++


Автор: Дмитрий11 (не зарегистрирован), дата: 21 декабря, 2010 - 18:13
#permalink

в FireFox:

var sc = 1;
switch (sc) {
case false:
alert('false');
break;

case true:
alert('true');
break;


default:
//попадаем сюда
if ( !isNaN(sc) )
   alert( sc.toString() );
}

похоже сравнение типов здесь c использованием оператора "===".
Во всех ли бразерах так?


Автор: Гость (не зарегистрирован), дата: 27 апреля, 2011 - 14:11
#permalink

Да, оператор идентичности.


Автор: most (не зарегистрирован), дата: 14 марта, 2011 - 16:53
#permalink

То же самое что и if(){}else if(){}else if(){}else{}


Автор: Гость (не зарегистрирован), дата: 3 мая, 2011 - 09:51
#permalink

Не совсем так. Switch можно считать заменной if () else if () ... только, если используется оператор break

И есть еще одно существенное отличие:
комбинация

case cond1:
case cond2:
     // some code here
break

будет работать, как:

if (cond1 || cond2) {
          // some code here
}

а не как:

if (cond1) {
       if (cond2) {
           // some code here
       }
}

Автор: Dimitryi83 (не зарегистрирован), дата: 30 августа, 2011 - 16:52
#permalink

А есть ли возможность поставить интервал?
Например Case 5 -10 (То есть, 5, 6, 7, 8, 9, 10. Дефис я поставил для примера, я понимаю что это математическая операция. А есть символы интервала?)


Автор: Гость (не зарегистрирован), дата: 7 сентября, 2011 - 15:15
#permalink

case x>5:
case x<10:
// some code here
break


Автор: Sweet, дата: 8 сентября, 2011 - 14:05
#permalink
var x = 7;
switch( true ){
  case x < 5:
  alert( "x < 5" );
  break;
  *!*case x > 5 && x < 10:*/!*
  alert( "5 < x < 10" );
  break;
  case x > 10:
  alert( "x > 10" );
  break;
};

Автор: Гость (не зарегистрирован), дата: 18 января, 2012 - 07:31
#permalink

Ваш код равнозначен:

if ( (x>5) || (x<10) ){
  // some code here
}

А значит код выполнится в любом случае! Даже при x = -100500


Автор: Гость (не зарегистрирован), дата: 3 октября, 2012 - 06:53
#permalink

А вот в таком примере:

case x>5:
case x<10:
// some code here
break

условия не надо брать в скобки?

case (x>5):
case (x<10):
// some code here
break


Автор: Chaotic Evil, lol (не зарегистрирован), дата: 10 января, 2012 - 21:35
#permalink

Я попросил бы добавить в статью пример того, как работать с интервалами (т.е. "%переменная% %/= (необходимое подчеркнуть, лол)% %число%").
Да, решение предложенное в комментариях, в принципе очевидно, но таки и до него нужно додуматься. Да, хорошо, что оно на страничке (пусть и в комментариях) есть.
Но таки в самой статье смотрелось бы дивно.


Автор: Вовик (не зарегистрирован), дата: 21 января, 2012 - 14:48
#permalink
var zapros = navigator.userAgent;
var shablon = /(chrome|firefox)/gi;
var q1 = zapros.match(shablon);
switch (q1) {
	case 'Chrome':
	document.write("Это Chrome")
	break

	case 'Firefox':
	document.write("Это Firefox")
	break

	default:
	document.write("Не получилось")
}

Ребята скажите, почему у меня не работает. Хочу проверить какой у пользователя браузер и вывести сообщение.
Я уже и так и эдак не могу найти ошибку, а может это вообще не будет работать.
(Только switch, if-else и другие регулярные выражения не предлагать)


Автор: Гость (не зарегистрирован), дата: 26 января, 2012 - 15:59
#permalink

Видимо потому что в q1 у вас массив, в нулевом элементе которого - ожидаемое


Автор: Вовик (не зарегистрирован), дата: 28 января, 2012 - 16:32
#permalink

аффигеть, спасибо!
.match() как бы много совпадений нашел и вернул массив.


Автор: Guardian, дата: 18 июня, 2014 - 23:52
#permalink

string.match() всегда возвращает массив.


Автор: Гость (не зарегистрирован), дата: 21 мая, 2012 - 20:49
#permalink

А мне вот интерсно сработает ли вот такой вот код:

var a = 1;
var b = 2;

switch (a) {

  case '3' : 
    alert('foo');
    break;

  case 'a' :
    var c = a;
    a=b;
    nameF(a,b,c,);
    break;
}
function nameF(arg1,arg2,arg3) {
  alert('a = '+arg1+'  b = '+arg2+'  c = '+arg3+'  ');
}

Автор: Гость (не зарегистрирован), дата: 3 июня, 2015 - 18:43
#permalink

Немного другой код делал, но похожий) Калькулятор.

var op='+';
switch (op){
case '+': 
	rez = num1+num2;
	alert(num1 + op + num2 + '=' + rez);
	break;
case '-': 
	rez = num1-num2;
	alert(num1 + op + num2 + '=' + rez);
	break;
}

Все работает!
Если вы про то, что в case много писать


Автор: megabyte1024 (не зарегистрирован), дата: 1 июля, 2012 - 23:49
#permalink

А можно как в Delphi после слова case перечислять несколько значений?


Автор: Гость (не зарегистрирован), дата: 7 ноября, 2012 - 16:42
#permalink

А можно сделать что бы файл работал как в php типа file.html?id=id ?


Автор: кот Вася (не зарегистрирован), дата: 5 декабря, 2012 - 12:40
#permalink

а как сделать, чтобы при дефолтном варианте ничего не менялось (выполнялось все как до введения свитча).

а то я не указываю дефолт, у меня и для остальных значений выполняется код, что я описал для одного варианта


Автор: russeljo, дата: 9 декабря, 2012 - 15:34
#permalink

Возможно ли конструкции делать вложенными?

например

switch (a)
{ case 1:
       switch (b) {
           case 2: 
                 ........
         }
       ..........
  case 2: 
       .........         
}

Автор: russeljo, дата: 9 декабря, 2012 - 15:38
#permalink

Сам выяснил, что можно

var x = prompt('name');
switch (x) {
	case '1':
			switch (x) {
						case '1':
 					 document.write("x=1");
  							break;
						};
			
	case '2':
		document.write("\; case continued")
	default:
		x = 1;
}

Автор: Гость, дата: 13 января, 2015 - 01:12
#permalink

Такое впечатление, что тут хим. лаборатория ядерных исследований и попытка изменить код может привести к техногенной катастрофе! Зачем спрашивать, "а получится?!" или "а такое будет работать?!". Хре...вы программисты! А самим попробовать?! А если вам вналом даже код свой протестировать - вы не программисты.


Автор: jors (не зарегистрирован), дата: 26 июня, 2013 - 10:21
#permalink

А такой вариант прокатит?

switch (variable) {
   case 1,2,5:
         //code
         break;
   case 7,9,10:
         //code
         break;
}

Автор: Гость (не зарегистрирован), дата: 21 декабря, 2013 - 07:12
#permalink

В примере забыли поставить точки с запятыми после каждого break


Автор: Гость (не зарегистрирован), дата: 30 января, 2014 - 13:53
#permalink

"А такой вариант прокатит?"
Меня всегда удивлял этот вопрос. javaScript же компилируется в браузере. Почему бы не проверить свой кусок кода... А если не прокатит - ответа консоли иногда хватает, чтобы понять в чем дело.
Другое дело - задавать вопросы "почему не работает" и "почему результат некорректный". С эти консолька не всегда справляется.


Автор: Никита Драгуцану (не зарегистрирован), дата: 17 апреля, 2014 - 09:10
#permalink
var a = 'jpg';
var b = 'png';
$('#main').prepend('<select><option>'+a+'</option><option>'+b+'</option></select>');
$('button').click(check);
function check() {
var m = $('option').val();
switch(m){
case a : $('#main').prepend('jpg'); break;
case b : $('#main').prepend('png'); break;
default : $('#main').prepend('LOL');
}
}

Мучаюсь как могу, уже не знаю что делать, вначале строил это на if и else, потом решил сделать компактнее со switch. Чего я пытаюсь добиться? Выбрал JPG, нажал на кнопку и написалось JPG. Выбрал PNG, нажал на кнопку и написалось PNG. Начальное значение в теге select как вы видите JPG и его он выводит без проблем, но при нажатии кнопки с выбранным PNG он высвечивает LOL - т.е. то что находится в default. Желательно не тупо сказать "вот так", а объяснить почему именно "вот так".


Автор: Гость (не зарегистрирован), дата: 18 апреля, 2014 - 21:09
#permalink

Проблема в селекторе $('option') - он выбирает все option'ы на странице, а тебе нужен активный. Добавь к селектору фильтр :selected, а именно $('option:selected').


Автор: Guardian, дата: 27 июня, 2014 - 17:20
#permalink

для уменьшения вышеизложенных вопросов.

"выполняемый блок кода" в

switch( switch_expression ) {
    case  case_expression:
        // выполняемый блок кода
}

сработает только, если (switch_expression) === (case_expression) вернет true.


Автор: Гость (не зарегистрирован), дата: 13 ноября, 2015 - 10:53
#permalink

Вывести окно для ввода текста, после введения числа выходит введенное число, и вычисляется произведение этого числа на число больше его на 1. (например ввели 7, выходит 7 и 7*(7+1)=56)


Автор: Гость (не зарегистрирован), дата: 27 января, 2016 - 13:44
#permalink

Подскажите пожалуйста где можно найти описание данной конструкции:
return {
'case1' : 'value1',
...
'caseN' : 'valueN'
}[myVar]

Она работает! И можно ли каким-то образом заменить обьектом то, что в скобках?


Автор: Гость (не зарегистрирован), дата: 27 января, 2016 - 13:49
#permalink

Ответ самому себе на вопрос (Автор: Гость (не зарегистрирован), дата: 27 января, 2016 - 14:44) :
Ну конечно же! Все просто!
В большинстве случаев для решения задачи, ее нужно правильно сформулировать!


Автор: Гость (не зарегистрирован), дата: 22 марта, 2016 - 14:44
#permalink

break в функциях можно заменить на return


Автор: Гость (не зарегистрирован), дата: 18 марта, 2019 - 11:46
#permalink

AHENYJ SAET


Автор: Гость (не зарегистрирован), дата: 12 апреля, 2022 - 15:17
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 00:58
#permalink

Автор: AhmedMalik (не зарегистрирован), дата: 26 января, 2023 - 23:46
#permalink

Couldn't think of this, but it's nail salons in the area amazing! I wrote several posts similar to this one, but please come and see.


Автор: Гость (не зарегистрирован), дата: 29 июня, 2023 - 06:58
#permalink

Why don't you try tiny fishing to have much fun time.


Автор: homeplatechanneling (не зарегистрирован), дата: 17 августа, 2023 - 07:28
#permalink

Ваш блог фантастический; у вас тут очень интересные посты. спасибо blob opera


Автор: Гость (не зарегистрирован), дата: 4 ноября, 2023 - 07:12
#permalink

Wordle is the game that has me glued to my phone every morning. It's challenging and incredibly enjoyable.


Автор: Гость (не зарегистрирован), дата: 22 ноября, 2023 - 11:46
#permalink

The clever incorporation of resource management adds depth to the Watermelon Game gameplay, requiring players to think ahead and plan their moves strategically.


Автор: James Groves (не зарегистрирован), дата: 17 февраля, 2024 - 14:22
#permalink

Basketball legends game, which is exciting and popular among sports games, can be a great option for those who like to have fun.


Автор: John Wilson (не зарегистрирован), дата: 2 марта, 2024 - 05:22
#permalink

So there I was, tangled in a web of endless if-else statements in my code, feeling like I was trying to solve a puzzle in the dark. Then, boom, I discovered the switch statement. It was like finding a flashlight. Suddenly, organizing my code wasn't a game of guesswork anymore. I took an online survey about these javascript functions and it turns out this is a well known item.


Автор: Nanisa (не зарегистрирован), дата: 22 марта, 2024 - 11:23
#permalink

A game that has never stopped being hot: word games. You can play a lot of word games at word games, Experience with your children and friends will definitely be your good means. Help you learn as well as expand your mind wordle unlimited


Автор: Гость (не зарегистрирован), дата: 10 апреля, 2024 - 12:27
#permalink

Welcome to the arena of instant action and fierce competition! IO games offer a unique blend of simplicity, strategy, and real-time multiplayer mayhem


Автор: Nanasi12 (не зарегистрирован), дата: 24 апреля, 2024 - 11:55
#permalink

Puzzle games that test a player's spelling, vocabulary, and word knowledge are called word games. Word games can be played in a variety of formats and with different rules, either alone or with multiple players, online or offline nerdle


Автор: hane (не зарегистрирован), дата: 24 апреля, 2024 - 12:19
#permalink

That's the truth


Автор: Гость (не зарегистрирован), дата: 4 мая, 2024 - 12:52
#permalink

Are you ready to show off your rhythm skills? FNF is the perfect game for you! Compete against players online and see who can hit the right notes at the right time!


Автор: Гость (не зарегистрирован), дата: 23 мая, 2024 - 22:31
#permalink

J'ai envie d'un plan cul à Périgueux et vous ?!


Автор: marco tan (не зарегистрирован), дата: 25 июня, 2024 - 21:24
#permalink

Автор: marco greggy (не зарегистрирован), дата: 26 июня, 2024 - 18:13
#permalink

By considering these factors and tips, you can choose the best vinyl siding cleaner that suits your specific cleaning needs and ensures your siding remains clean, protected, and looking its best for years to come.


Автор: DAVE john (не зарегистрирован), дата: 9 июля, 2024 - 16:11
#permalink

Автор: Lorena Holmes (не зарегистрирован), дата: 20 сентября, 2024 - 16:11
#permalink

Your piece eloquently articulates the topic, and I completely endorse your views. I wish more people would appreciate your crusher clicker writing, so I’ll be sure to recommend it to my friends!


Автор: Wewe (не зарегистрирован), дата: 2 октября, 2024 - 12:45
#permalink

Appreciate the practical tips. Very useful and clear. URL


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
3 + 13 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum