看了網路上這兩篇:

基本上就是建議把 if else/switch 改用一個 object 寫成 table 表,直接用對 key 的方式查找。號稱在判斷條件越多時有更好的效能,且有易擴充、易讀與易維護的特性,相較之下 switch 是有點舊且破碎的寫法,隱憂是包了幾層巢狀就埋了多少個break,日後debug時看flow簡直作死?

簡單的範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function device(type) {
switch (type) {
case "mac":
case "iphone":
return "safari";
break;
case "android":
return "chrome";
break;
case "windows":
return "IE";
break;
}
}
device('iphone'); // 'safari'

改寫後:

1
2
3
4
5
6
7
var device={
mac: "safari",
iphone: "safari",
android: "chrome",
windows: "IE"
};
device[iphone]; // 'safari'

p.s.附上各家瀏覽器對各種寫法的跑分測試網頁,Chrome在55版之後已無太大差別, Firefox 的 table lookup 居然慢了其他半截!? Safari 中 switch 則有明顯落差。不過最慢也有每秒2千萬次執行的數量級,人類應該很難察覺吧。