switch (true) 作为 else if 的替代品 [关闭]

2024-03-20

我见过多次使用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)一开始可能会令人困惑,但对于速度或语义而言,这实际上并不重要。我个人认为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);

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

switch (true) 作为 else if 的替代品 [关闭] 的相关文章

  • 在 Angular 单元测试中应该如何处理运行块?

    我的理解是 当您在 Angular 单元测试中加载模块时 run块被调用 我认为如果你正在测试一个组件 你不会想同时测试run块 因为unit测试应该只是测试一个unit 真的吗 如果是的话有什么办法可以防止run阻止运行 我的研究让我认为
  • 是否可以将自定义 HTML 添加到传单图层组和图层控件

    有什么方法可以将自定义 HTML 注入图层组和图层控件中吗 在我们的应用程序中 我们实现了滑块 输入 范围 来调整不透明度设置 并且很明显 在其控制容器内部的基础层上使用专用滑块是有意义的 没有选项或参数可以修改此控件 理想情况下 我们希望
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • Webpack 和 Angular HTML 图像加载

    我一直对 webpack 和 Angular 感到头疼 这可能有一个简单的答案 但我无法弄清楚 我已经阅读了堆栈溢出中关于这个主题的几乎所有答案 但都无济于事 我有一个像这样的 html 页面 还有其他包含图像的模板 img
  • Twitter Bootstrap 轮播在加载时自动播放

    使用twitter bootstrap框架 如何调用轮播来 自动滑动 这意味着当页面加载时 轮播会自动滚动 我尝试过 javascript onLoad click 函数 a 下一个链接的 但这不起作用 你应该这样做Twitter Boot
  • Disqus 评论数始终为 0 条评论

    我想我已经按照通用代码的说明设置了 Disqus 问题是它总是说某个帖子有 0 条评论 拿这个帖子来说 http tx0rx0 com retropie and the raspberry pi http tx0rx0 com retrop
  • RequireJS 文本插件和变量连接字符串

    我正在使用 RequireJS 文本插件来加载一些 html 模板 当我将字符串文字传递给 require 函数时 它工作正常 var templateHTML require text templates template name ht
  • Strapi 未加载 Digital Ocean 上托管的现有 MongoDB 中的集合

    我正在使用 Strapi 创建一个新应用程序 并尝试将其与托管在 Digital Ocean 上的 MongoDB 连接 但不幸的是Strapi 无法从现有 MongoDB 获取集合 在这里 我提到我实现 Strapi 与现有 MongoD
  • getElementsByClassName & IE8:对象不支持此属性或方法[重复]

    这个问题在这里已经有答案了 I know getElementsByClassName 不支持IE8 你知道我可以用什么来代替吗 我因错误而变得烦人 对象不支持此属性或方法 HTML 代码是 function sumar var elems
  • 模型不是 AngularJS 中输入的日期对象

    使用 AngularJS 我试图使用输入显示日期type date
  • Javascript:通过将路径作为字符串传递给对象来获取对象的深层值[重复]

    这个问题在这里已经有答案了 可能的重复 使用字符串键访问嵌套的 JavaScript 对象 https stackoverflow com questions 6491463 accessing nested javascript obje
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • jspm / jQuery / TypeScript - 模块“jquery”没有默认导出

    我正在尝试使用 TypeScript 和 jspm system js 来引导 Web 应用程序进行模块加载 我还没有走多远 安装 jspm 后 并使用它来安装 jQuery jspm install jquery 以及基础知识 main
  • 全局未在 ../node_modules/socket.io-parser/is-buffer.js 中定义

    预先感谢您帮助我 我正在尝试在我的一个角度组件中连接套接字 但在浏览器的控制台中它会抛出一个错误 指出 Global 未在 Object node modules socket io parser is buffer js 中定义 这是我的
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • d3力定向布局-链接距离优先

    在 d3 中使用力导向布局 如何使链接距离成为优先事项 同时仍然保持良好的图形布局 如果我指定动态链接距离 但保留默认费用 则我的图形距离会因费用函数而发生一些变形 并且不再是准确的距离 但是 如果我删除电荷 图表将如下所示 任何建议表示赞
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • 如何从react-bootstrap复选框获取值/属性?

    我正在尝试使用反应引导复选框 https react bootstrap github io components html forms controls https react bootstrap github io components
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • 无法访问 Django 服务器 http://127.0.0.1:8000/

    第一次它工作得很好 但现在显示了这个问题 app python manage py runserver Performing system checks System check identified no issues 0 silence
  • 更改路线不会滚动到新页面的顶部

    当路线改变时 我发现了一些不受欢迎的行为 至少对我来说是这样 在教程的第11步中http angular github io angular phonecat step 11 app phones http angular github i
  • 如何将双精度值和浮点值插入到sqlite中?

    以下是我的数据库创建代码 Override public void onCreate SQLiteDatabase db db execSQL CREATE TABLE TABLE NAME ID INTEGER PRIMARY KEY A
  • 打开跟踪文件时出错:没有这样的文件或目录 (2)

    我收到上述错误 打开跟踪文件时出错 没有这样的文件或目录 2 当我在模拟器上运行我的 Android 应用程序时 有人能告诉我这可能是什么原因吗 我正在使用 android sdk 20 并将以下行添加到 AndroidManifest x
  • 未捕获的 ReferenceError:ReactDOM 未定义

    所以我有Rails应用程序 我安装了react rails gem 设置它并尝试运行测试应用程序 刚安装好后 当我尝试运行 hello world 程序时 发生了以下错误 未捕获的 ReferenceError ReactDOM 未定义 这
  • C#,WinForms 中的双缓冲区?

    private void button3 Click object sender EventArgs e this DoubleBuffered true for int i 0 i lt 350 i using Graphics g th
  • 如何解析 gridstack.js 项目?

    也许这很简单 但我仍在学习 JS 之类的东西 我正在使用插件https github com troolee gridstack js https github com troolee gridstack js并希望在小部件重新定位 调整大
  • Android:购买后使用产品(应用内计费)

    我在应用程序计费方面遇到一些问题 我想在应用程序内创建一个可以多次购买的产品 但谷歌在应用程序内计费的方式是 产品必须先被消费 然后才能再次购买 我用下面的代码尝试过 public class HomeFragment extends Fr
  • 使用 SonarQube Web api 分析项目

    我使用 SonarQube Web api 创建了一个项目 现在我正在尝试分析该项目 我找到了这个 POST api project analyses create event 当我尝试这项服务时 我得到了这样的回复 errors msg
  • jQuery html() 和 &

    我正在人员列表中进行搜索 我希望它能够即时显示结果 所以它确实做到了 但我需要一个链接 它应该如下所示 chatid 18 userid 45 create new 但通过此显示结果后 get ajax php sec search use
  • 经过身份验证后访问 [Authorize] 控制器时收到 404

    我正在尝试在 ASP NET MVC Core 应用程序 NetCore 2 上使用 IdentityServer4 实现身份验证和访问控制 虽然这不是我第一次实现后端 但这是第一次使用 net 并且我正在努力解决一些问题 我已按照以下说明
  • 文本分析:使用 python 查找列中最常见的单词

    我创建了一个数据框 其中只有一个带有主题行的列 df activities filter Subject axis 1 df shape 这返回了这个数据框 Subject 0 Call Out Quadria Capital May Lo
  • Azure IOT 配置服务中的个人注册无法通过 REST API 运行

    我目前面临着使用提供的 REST API 在 Azure 设备配置服务中进行个人注册的挑战 文档中也存在一些空白 我正在按照此网址中的官方文档中提到的步骤进行操作 https learn microsoft com en us rest a
  • DistributedNotificationCenter - 如何在应用程序之间传递数据?

    我构建了两个应用程序 主 应用程序和一个支持它的 Finder 扩展 使用分布式通知中心我可以成功地在应用程序之间来回发布消息 并且注册的观察者事件会按预期触发 问题似乎是我无法通过该事件传递任何用户数据 所有文档都表明您可以通过NS词典
  • Python 全局对象变量

    我想使用一个已从独立模块在类内部实例化的对象 我试图通过使对象引用全局来做到这一点 我想我想利用当前的对象而不是创建一个新的对象 假设我在模块文件中有这段代码 import moduleFile class A def checkAdmin
  • 选择 FTP 和 HTTP 传输的缓冲区大小

    在实现低级 HTTP 和 FTP 传输时 如何选择缓冲区的大小 从套接字读取或写入套接字的字节数 以获得最大吞吐量 我的应用程序应该在 130 Kbps 到 3 Mbps 的连接上使用 HTTP 或 FTP 传输数据 我事先知道预期的速度
  • Google Now 活动卡 - 如何显示更多信息

    我正在通过将架构数据添加到确认电子邮件来测试 Google Now 中的事件卡 目前 我正在尝试用铁路旅程信息填充事件卡 因为不支持铁路旅程模式 不幸的是 我只能获取 Google Now 卡片中显示的少量信息 这是我要添加到电子邮件中的内
  • 如何使用 importlib.resources.path(package, resources)?

    我正在使用以下代码创建一个 GeneratorContextManager try import importlib resources as pkg resources except ImportError Try backported
  • 在没有 RequireJS 的情况下使用 Angular Dragula

    我很想使用 angular dragula 模块在我的 Angular 项目中实现拖放 https github com bevacqua angular dragula https github com bevacqua angular
  • switch (true) 作为 else if 的替代品 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我见过多次使用switch true 今天我自己用过它 而不是多个else ifs 这是我使用它的案例 var isChrome navigat