Конструкция 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('Я таких значений не знаю')
}
У меня не работает что-то. Причем по-моему уже второй раз пробую этот код отсюда.
в кавычки заключи значения, с которыми сравниваешь кейсами, вот так:
... case 'test': ...
... case 'megatest': ...
иначе у тебя test и megatest в кейсах воспринимаются как переменные и их содержимое не равно тому, что у тебя находится в id
обведи то, что идёт после case в кавычки.
например:
case 'test':
alert('test')
break
case 'megatest':
alert('megatest')
break
default:
alert('Я таких значений не знаю')
Может стоит писать вместо
case test:
с кавычками?
case "test":
Из статьи неясно, может ли применяться данный оператор для строковых данных.
В Си, Си++ данный оператор применим только для порядковых типов данных.
Всё же это язык "среднего уровня".
На языке же высокого уровня (пример PHP) данный оператор может применяться и для строковых данных.
Попробовал запустить в JS, ответ неоднозначен: с одной стороны ошибка не генерится, с другой, работает оператор непредсказуемо.
Аргументируем, не стесняемся!
Т.е JS - язык "среднего уровня", а PHP - язык "высокого уровня"? Я не хочу холиварить, оскорблять "язык для персональных страничек", но сам факт такого высказывания показывает, что автор не знает ни JS, ни PHP.
Тот факт, что JS менее "нагружен", чем сишки \ кресты \ жаба \ питон лишь указывает на более полную свободу в выборе решения, чем в вышеперечисленных.
Да, не -- я думаю, что "язык среднего" уровня относился к C и C++
по сравнению с JS и PHP это можно считать справедливым.
Хотя на самом деле все указанные языки являются языками высокого уровня.
Языком среднего уровня условно можно считать байт-код Java и управляемый код .Net
в FireFox:
похоже сравнение типов здесь c использованием оператора "===".
Во всех ли бразерах так?
Да, оператор идентичности.
То же самое что и if(){}else if(){}else if(){}else{}
Не совсем так. Switch можно считать заменной if () else if () ... только, если используется оператор break
И есть еще одно существенное отличие:
комбинация
будет работать, как:
а не как:
А есть ли возможность поставить интервал?
Например Case 5 -10 (То есть, 5, 6, 7, 8, 9, 10. Дефис я поставил для примера, я понимаю что это математическая операция. А есть символы интервала?)
Я попросил бы добавить в статью пример того, как работать с интервалами (т.е. "%переменная% %/= (необходимое подчеркнуть, лол)% %число%").
Да, решение предложенное в комментариях, в принципе очевидно, но таки и до него нужно додуматься. Да, хорошо, что оно на страничке (пусть и в комментариях) есть.
Но таки в самой статье смотрелось бы дивно.
Ребята скажите, почему у меня не работает. Хочу проверить какой у пользователя браузер и вывести сообщение.
Я уже и так и эдак не могу найти ошибку, а может это вообще не будет работать.
(Только switch, if-else и другие регулярные выражения не предлагать)
Видимо потому что в q1 у вас массив, в нулевом элементе которого - ожидаемое
аффигеть, спасибо!
.match() как бы много совпадений нашел и вернул массив.
string.match() всегда возвращает массив.
А мне вот интерсно сработает ли вот такой вот код:
Немного другой код делал, но похожий) Калькулятор.
Все работает!
Если вы про то, что в case много писать
А можно как в Delphi после слова case перечислять несколько значений?
А можно сделать что бы файл работал как в php типа file.html?id=id ?
а как сделать, чтобы при дефолтном варианте ничего не менялось (выполнялось все как до введения свитча).
а то я не указываю дефолт, у меня и для остальных значений выполняется код, что я описал для одного варианта
Возможно ли конструкции делать вложенными?
например
Сам выяснил, что можно
А такой вариант прокатит?
В примере забыли поставить точки с запятыми после каждого break
"А такой вариант прокатит?"
Меня всегда удивлял этот вопрос. javaScript же компилируется в браузере. Почему бы не проверить свой кусок кода... А если не прокатит - ответа консоли иногда хватает, чтобы понять в чем дело.
Другое дело - задавать вопросы "почему не работает" и "почему результат некорректный". С эти консолька не всегда справляется.
Мучаюсь как могу, уже не знаю что делать, вначале строил это на if и else, потом решил сделать компактнее со switch. Чего я пытаюсь добиться? Выбрал JPG, нажал на кнопку и написалось JPG. Выбрал PNG, нажал на кнопку и написалось PNG. Начальное значение в теге select как вы видите JPG и его он выводит без проблем, но при нажатии кнопки с выбранным PNG он высвечивает LOL - т.е. то что находится в default. Желательно не тупо сказать "вот так", а объяснить почему именно "вот так".
Проблема в селекторе $('option') - он выбирает все option'ы на странице, а тебе нужен активный. Добавь к селектору фильтр :selected, а именно $('option:selected').
для уменьшения вышеизложенных вопросов.
"выполняемый блок кода" в
сработает только, если
(switch_expression) === (case_expression)
вернетtrue
.Вывести окно для ввода текста, после введения числа выходит введенное число, и вычисляется произведение этого числа на число больше его на 1. (например ввели 7, выходит 7 и 7*(7+1)=56)
Подскажите пожалуйста где можно найти описание данной конструкции:
return {
'case1' : 'value1',
...
'caseN' : 'valueN'
}[myVar]
Она работает! И можно ли каким-то образом заменить обьектом то, что в скобках?
Ответ самому себе на вопрос (Автор: Гость (не зарегистрирован), дата: 27 января, 2016 - 14:44) :
Ну конечно же! Все просто!
В большинстве случаев для решения задачи, ее нужно правильно сформулировать!
break в функциях можно заменить на return
Ваш блог фантастический; у вас тут очень интересные посты. спасибо blob opera