Помогите разобраться с оператором 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, время: 07:32. |