Конструкция 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>Автор: Гость (не зарегистрирован), дата: 17 марта, 2010 - 22:43
#permalinkМожет стоит писать вместо
case test:
с кавычками?
case "test":
Автор: Гость (не зарегистрирован), дата: 18 октября, 2010 - 17:08
#permalinkИз статьи неясно, может ли применяться данный оператор для строковых данных.
В Си, Си++ данный оператор применим только для порядковых типов данных.
Всё же это язык "среднего уровня".
На языке же высокого уровня (пример PHP) данный оператор может применяться и для строковых данных.
Попробовал запустить в JS, ответ неоднозначен: с одной стороны ошибка не генерится, с другой, работает оператор непредсказуемо.
Автор: Дмитрий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 использованием оператора "===".
Во всех ли бразерах так?
Автор: most (не зарегистрирован), дата: 14 марта, 2011 - 16:53
#permalinkТо же самое что и if(){}else if(){}else if(){}else{}
Автор: Dimitryi83 (не зарегистрирован), дата: 30 августа, 2011 - 16:52
#permalinkА есть ли возможность поставить интервал?
Например Case 5 -10 (То есть, 5, 6, 7, 8, 9, 10. Дефис я поставил для примера, я понимаю что это математическая операция. А есть символы интервала?)
Автор: Chaotic Evil, lol (не зарегистрирован), дата: 10 января, 2012 - 21:35
#permalinkЯ попросил бы добавить в статью пример того, как работать с интервалами (т.е. "%переменная% %/= (необходимое подчеркнуть, лол)% %число%").
Да, решение предложенное в комментариях, в принципе очевидно, но таки и до него нужно додуматься. Да, хорошо, что оно на страничке (пусть и в комментариях) есть.
Но таки в самой статье смотрелось бы дивно.
Автор: Вовик (не зарегистрирован), дата: 21 января, 2012 - 14:48
#permalinkvar 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 и другие регулярные выражения не предлагать)
Автор: Вовик (не зарегистрирован), дата: 28 января, 2012 - 16:32
#permalinkаффигеть, спасибо!
.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+' '); }Автор: 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: ......... }Автор: 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
#permalinkvar 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]
Она работает! И можно ли каким-то образом заменить обьектом то, что в скобках?
Автор: Гость (не зарегистрирован), дата: 22 марта, 2016 - 14:44
#permalinkbreak в функциях можно заменить на return
Автор: homeplatechanneling (не зарегистрирован), дата: 17 августа, 2023 - 07:28
#permalinkВаш блог фантастический; у вас тут очень интересные посты. спасибо blob opera