Взаимозаменяем ли switch с if в JavaScript?
Ситуация, в которой есть смысл сравнивать эти инструкции — проверка на соответствие множеству взаимоисключающих условий.if else
Обрабатываются все условия методично, друг за другом.switch
Каждый case — точка входа в блок инструкций.
Если сравнивать быстродействие, то webkit покажет почти одинаковые результаты, в Gecko производительность выше у switch, но не кардинально (на 20-30%), что не принципиально.
А вот логика у этих инструкций разная. Это заметно, если для некоторых значений требуется выполнить одни и те же инструкции. В этом случае написанные подряд case могут быть удобней, чем составная проверка в if. Кроме того, после выполнения входа выполнение инструкций продолжается либо до инструкции break, либо до окончания инструкции switch. И тут у switch появляются дополнительные возможности.
Следует также учесть, что в инструкции switch выполняется проверка с учётом типа (===), что отличает её от if, в которой проверяться может хоть приведённое значение (==), хоть чёрт в ступе. Значения case должны представлять собой примитивы (выражения, в результате выполнения которых подставляются примитивы).Пример ifif (x === 'a') {
	//Только для 'a'
} else if (x === 'b' || x === 'c' || x === 'd') {
	//Только для 'b', 'c', 'd'
} else {
	//Для остальных
}Пример switchswitch (x) {
	case 'a':
		//Только для 'a'
		break;
	case 'b':
	case 'c':
	case 'd':
		//Только для 'b', 'c', 'd'
		break;
	default:
		//Для остальных
}
А вот такое возможно только с использованием switchswitch (x) {
	case 'a':
		//Только для 'a'
	case 'b':
		//Только для 'a', 'b'
	case 'c':
	case 'd':
		//Только для 'a', 'b', 'c', 'd'
		break;
	default:
		//Для остальных
}
Не всегда, для сложных условий switch не подходит