switch(true)作为else的替代if

时间:2013-12-15 16:07:15

标签: javascript

我已经多次看到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更明确。你认为这是一个好方法吗?

1 个答案:

答案 0 :(得分:2)

这只是个人意见的问题。 switch(true)一开始可能会让人感到困惑,但在速度或语义方面确实无关紧要。我个人认为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);

看起来非常酷和简洁,但似乎有点不直观。我只想说,无论你想做什么都没关系,这样的事情没有标准。