2013-12-15 66 views
1

我已經看到多次使用switch(true),並且今天使用它而不是多個else ifs。這裏是我用它的情況:切換(真)作爲其他選擇如果

var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') != -1; 
var isSafari = navigator.userAgent.toLowerCase().indexOf('safari') != -1; 
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') != -1; 
var browser = null; 
switch (true) { 
    case isChrome: 
     { 
      browser = "chrome"; 
      break; 
     } 
    case isSafari: 
     { 
      browser = "safari"; 
      break; 
     } 
    case isFirefox: 
     { 
      browser = "firefox"; 
      break; 
     } 
} 

我的看法是比多個else ifs明確得多。你認爲這是一個好方法嗎?

+4

考慮在[codereview.se]詢問 - 這類問題是Stack Overflow的主題。快樂的編碼。 – Kobi

+0

看起來很好,但你不需要交換機中的花括號。 – adeneo

+1

http://jsfiddle.net/GjPUH/1/ – adeneo

回答

2

這實際上只是個人意見的問題。起初可能會造成混淆,但在速度或語義方面確實無關緊要。我個人認爲if...else在這種情況下看起來更好,因爲選項太少了。如果有10-15個瀏覽器,我可能會使用switch

如果您正在尋找純粹簡潔,@ adeneo的正則表達式會的工作,但是這將是更加不明白,這個代碼

var ua = navigator.userAgent.toLowerCase(), 
browser = ua.match(/(chrome|safari|firefox)/).length ? ua.match(/(chrome|safari|firefox)/)[0] : 'nope'; 

console.log(browser); 

它看起來真的很酷,簡潔,但似乎有點直觀。我只是說,無論你想做什麼都很好,沒有這樣的標準。

+0

我會贊成,酷代碼!我同意這可能不會對其他人可讀,但對我來說,它實際上更具可讀性,因爲我討厭通過評論和長開關滾動來弄清楚發生了什麼,而且通常會更容易閱讀簡短的簡短語句,但是這只是我,開關或條件也很好。 – adeneo