switch(true)作为else-if的替代

switch (true) as alternative to else if

本文关键字:else-if 作为 true switch      更新时间:2023-09-26

我见过多次使用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要明确得多。你认为这是个好方法吗?

这实际上只是个人意见的问题。switch(true)一开始可能会让人感到困惑,但它在速度或语义方面并不重要。I、 个人认为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);

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