| Сообщение от psii | 
	| Да, дело было в этом, надо писать switch (true). | 
	
нет, надо просто почитать и понять как работает инструкция switch и не сравнивать числовые и логические значения на равенство, ожидая, что когда-нибудь они будут строго равны
у switch только один подводный камень, который нужно запомнить - там 
строгое сравнение
всё остальное обычно быстро просекается
http://es5.javascript.ru/x12.html#x12.11
	
	| Цитата: | 
	| Если input равно clauseSelector согласно определению оператора ===, то Присвоить searching значение false.
 Если C имеет StatementList, то
 Произвести вычисление StatementList для C, и пусть R будет результатом.
 Если R – непредвиденное завершение, вернуть R.
 Пусть V =R.value.
 
 
 Повторить
 Пусть C будет следующим CaseClause в A. Если такого CaseClause нет, вернуть (normal, V, empty).
 Если C имеет StatementList, то
 Произвести вычисление StatementList для C, и пусть R будет результатом.
 Если R.value не равно empty, то пусть V =R.value.
 Если R – непредвиденное завершение, то вернуть (R.type,V,R.target).
 
 | 
	
перевожу: если строго равны, то выполнять всё, что после двоеточия до встречи 
непредвиденного завершения в виде break (см. чуть выше по ссылке)
вернуть предполагает завершение выполнения шагов алгоритма
если посмотреть дальше (пункт Повторить), то видно, что все операторы во всех case-ах будут выполняться вне зависимости от того, равны ли они с результатом вычисления входного выражения, выполняться сам понимаешь до какого момента