2013-12-15 33 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