Помогите разобраться с оператором switch
Помогите разобраться с оператором switch.
В примере ниже, одинаковые конструкции на if и на switch. if работает, а switch нет, всегда выполняется то что в default. Что я не так делаю?
function adjustStyle(width)
{
width = parseInt(width);
switch (width)
{
case (width > 1280):
$("#paragraph4").attr("style", "display = ''");
break;
default:
$("#paragraph4").attr("style", "display: none");
}
/*
if (width > 1280)
{
$("#paragraph4").attr("style", "display = ''");
}
else
{
$("#paragraph4").attr("style", "display: none");
}
*/
}
$(function()
{
adjustStyle($(this).width());
$(window).resize(function()
{
adjustStyle($(this).width());
}
);
}
);
|
switch(1<2){
case true: alert(true); break
default: alert(false)
}
То есть, в твоем случае
switch (width>1280)
{
case true:
$("#paragraph4").attr("style", "display = ''");
break;
default:
$("#paragraph4").attr("style", "display: none");
}
|
Это был пример, в реальном скрипте много кейсов:
case (width > 1280): case (width > 1400): case (width > 1600): и т.д. Я знаю что на С и в PHP, такой код работал бы без проблем, а в javascript похоже какая-то засада. |
Я просто пытался объяснить логику работы. Может так понятней, я хз
width="100"
switch(width){
case "99": alert(99); break
case "100": alert(100); break
case "101": alert(101); break
default: alert("smth else")
}
|
Цитата:
|
Если не разберусь со switch буду использовать if.
Просто интересно понять в чем дело. Да и switch как-то кошернее, чем множественные if else. Логика switch мне понятна, но скрипт не работает. Вероятно здесь какой-то нюанс. Вопрос остается открытым. |
psii,
во первых, с логикой не лады
width=1400
f=function(width){
if (width > 1280) return alert(1)
if (width > 1400) return alert(2)
if (width > 1600) return alert(3)
}
f(width)
В данном случае, до второй ветви не дойдет надо как то
width=1400
f=function(width){
if (width >= 1280&&width<1400) return alert(1)
if (width >= 1400&&width<1600) return alert(2)
if (width >= 1600) alert(3)
}
f(width)
или
width=1400
f=function(width){
if (width >= 1600) return alert(1)
if (width >= 1400) return alert(2)
if (width >= 1280) alert(3)
}
f(width)
А что касается "кошерности", каждому инструменту -- свое место. |
Цитата:
width=100
switch(true){
case (width<100): alert(1); break
case (width===100): alert("right"); break
case (width>100): alert(3); break
default: alert("smth else")
}
|
Да, дело было в этом, надо писать switch (true).
Спасибо. |
Цитата:
у switch только один подводный камень, который нужно запомнить - там строгое сравнение всё остальное обычно быстро просекается http://es5.javascript.ru/x12.html#x12.11 Цитата:
вернуть предполагает завершение выполнения шагов алгоритма если посмотреть дальше (пункт Повторить), то видно, что все операторы во всех case-ах будут выполняться вне зависимости от того, равны ли они с результатом вычисления входного выражения, выполняться сам понимаешь до какого момента |
| Часовой пояс GMT +3, время: 18:19. |