switch statement?
var type = 'coke';
var drink;
switch(type) {
case 'coke':
drink = 'Coke';
break;
case 'pepsi':
drink = 'Pepsi';
break;
default:
drink = 'Unknown drink!';
}
console.log(drink); // 'Coke'
switch VS if else
function getDrink (type) {
if (type === 'coke') {
type = 'Coke';
} else if (type === 'pepsi') {
type = 'Pepsi';
} else if (type === 'mountain dew') {
type = 'Mountain Dew';
} else if (type === 'lemonade') {
type = 'Lemonade';
} else if (type === 'fanta') {
type = 'Fanta';
} else {
// acts as our "default"
type = 'Unknown drink!';
}
return 'You\'ve picked a ' + type;
}
Problems with switch
- 'break'를 수동으로 추가해야한다.
- 각 'case'내의 명령문으로 인해 디버깅이 어려워지고 잊어 버린 경우 중첩 오류가 발생할 수 있다.
- JavaScript는 중괄호를 사용하지만 스위치는 그렇지 않다.
Object Literal lookups
function getDrink (type) {
var drinks = {
'coke': 'Coke',
'pepsi': 'Pepsi',
'lemonade': 'Lemonade',
'default': 'Default item'
};
return 'The drink I chose was ' + (drinks[type] || drinks['default']);
}
var drink = getDrink('coke');
// The drink I chose was Coke
console.log(drink);
function getDrink (type) {
return 'The drink I chose was ' + {
'coke': 'Coke',
'pepsi': 'Pepsi',
'lemonade': 'Lemonade'
}[type];
}
- switch에 비해 유연하고 가독성과 유지 관리 성이 우수하다.
- 수동으로 분리 할 필요가 없다.
- case수가 증가함에 따라 Object의 성능은 스위치의 평균 비용보다 우수하다.
-Object의 접근 방식은 해시 테이블 조회, switch 일치 및 중단에 도달 할 때까지 각 사례를 평가해야한다.