Конструкция 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('Я таких значений не знаю')
}
У меня не работает что-то. Причем по-моему уже второй раз пробую этот код отсюда.
<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>в кавычки заключи значения, с которыми сравниваешь кейсами, вот так:
... case 'test': ...
... case 'megatest': ...
иначе у тебя test и megatest в кейсах воспринимаются как переменные и их содержимое не равно тому, что у тебя находится в id
Может стоит писать вместо
case test:
с кавычками?
case "test":
Из статьи неясно, может ли применяться данный оператор для строковых данных.
В Си, Си++ данный оператор применим только для порядковых типов данных.
Всё же это язык "среднего уровня".
На языке же высокого уровня (пример PHP) данный оператор может применяться и для строковых данных.
Попробовал запустить в JS, ответ неоднозначен: с одной стороны ошибка не генерится, с другой, работает оператор непредсказуемо.
Аргументируем, не стесняемся!
Т.е JS - язык "среднего уровня", а PHP - язык "высокого уровня"? Я не хочу холиварить, оскорблять "язык для персональных страничек", но сам факт такого высказывания показывает, что автор не знает ни JS, ни PHP.
Тот факт, что JS менее "нагружен", чем сишки \ кресты \ жаба \ питон лишь указывает на более полную свободу в выборе решения, чем в вышеперечисленных.
Да, не -- я думаю, что "язык среднего" уровня относился к C и C++
по сравнению с JS и PHP это можно считать справедливым.
Хотя на самом деле все указанные языки являются языками высокого уровня.
Языком среднего уровня условно можно считать байт-код Java и управляемый код .Net
в FireFox:
var sc = 1; switch (sc) { case false: alert('false'); break; case true: alert('true'); break; default: //попадаем сюда if ( !isNaN(sc) ) alert( sc.toString() ); }похоже сравнение типов здесь c использованием оператора "===".
Во всех ли бразерах так?
Да, оператор идентичности.
То же самое что и if(){}else if(){}else if(){}else{}
Не совсем так. 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 } }А есть ли возможность поставить интервал?
Например Case 5 -10 (То есть, 5, 6, 7, 8, 9, 10. Дефис я поставил для примера, я понимаю что это математическая операция. А есть символы интервала?)
case x>5:
case x<10:
// some code here
break
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; };Ваш код равнозначен:
if ( (x>5) || (x<10) ){ // some code here }А значит код выполнится в любом случае! Даже при x = -100500
Я попросил бы добавить в статью пример того, как работать с интервалами (т.е. "%переменная% %/= (необходимое подчеркнуть, лол)% %число%").
Да, решение предложенное в комментариях, в принципе очевидно, но таки и до него нужно додуматься. Да, хорошо, что оно на страничке (пусть и в комментариях) есть.
Но таки в самой статье смотрелось бы дивно.
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 и другие регулярные выражения не предлагать)
Видимо потому что в q1 у вас массив, в нулевом элементе которого - ожидаемое
аффигеть, спасибо!
.match() как бы много совпадений нашел и вернул массив.
А мне вот интерсно сработает ли вот такой вот код:
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+' '); }Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.