Ситуация, в которой есть смысл сравнивать эти инструкции — проверка на соответствие множеству взаимоисключающих условий.
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:
//Для остальных
}