switch 语句中如何出现 NaN 情况?

2024-02-23

Since NaN === NaN评估为false,是否可以添加一个NaN案例到一个switch陈述?

例如,假设我想进行以下切换:

switch(x){
    case 1:
    case 2:
    case 4:
        doSomething();
        break;
    case NaN:
        doSomethingElse();
        break;
    case default:
        doADifferentThing();
        break;
}

Sending NaN as x将转到默认情况。我知道有一些方法可以使用NaN在 switch 语句中(例如,我可以用if..else声明及使用isNaN),但是有没有更直接的方法呢?


我最初写道我只看到了一个解决方案,但是在我睡觉时我想出了一个极好的解决方案。

请始终记住,switch 不会执行隐式类型转换来比较大小写,因此如果您向 switch 语句提供字符串,它将与大小写中的整数不匹配,反之亦然。 如果要与字符串和整数进行比较,则必须先将整数转换为字符串,然后仅与字符串进行比较。

极好的解决方案:

正如 WouterH 所指出的,当使用包含数字的字符串时,我的初始解决方案将解析为默认值,这是 switch 语句的预期行为。但为了克服这个问题,解析这个论点可能会很有用。为此,您可以使用以下代码:

var x = "1";
switch (isNaN(x) || parseInt(x))
{
    case true:
      alert("IsNaN!") 
      break; 
    case 1: 
      alert("1"); 
      break; 
    case 2: 
      alert("2"); 
      break; 
    case 4: 
      alert("4"); 
      break; 
    default: 
      alert("default"); 
      break; 
}

我的初始精湛的方法 :

var x = "clearly not a number";
switch(x){
    case !isNaN(x) || x:
      alert("IsNaN!")
      break;
    case 1:
      alert("1");
      break;
    case 2:
      alert("2");
      break;
    case 4:
      alert("4");
      break;
    default:
      alert("default");
      break;
    }

如果 x 是字符串,则 isNaN 将返回 true,但这并不重要,因为由于 switch 语句的上述行为,true 不会对字符串求值为 true。

我原来的解决方案:

我什至不知道我在想什么,这看起来很糟糕,而且缩进很尴尬,但感谢您的支持!

var x = "clearly not a number";
switch(x){
    case 1:
      alert("1");
      break;
    case 2:
      alert("2");
      break;
    case 4:
      alert("4");
      break;
    case default:
       if (isNaN(x)){
          alert("isNaN");
          break;
       }
       alert("default");
       break;
}

布拉德的解决方案:

感谢布拉德的这一点。 我不太喜欢这个,因为它感觉有点像黑客,也就是说,这不是您期望使用 case 语句的方式,但它确实为您提供了最大的灵活性,所以我确信有是它的一个用例。

var x = "clearly not a number";
switch(true)
{
   case x==1:
      alert("1");
      break;
   case x==2:
      alert("2");
      break;
   case IsNaN(x):
      alert("IsNaN");
      break;
   case default:
      alert("default");
      break;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

switch 语句中如何出现 NaN 情况? 的相关文章

  • 单击输入[复选框]的标签将触发父级单击事件两次(淘汰)

    考虑这把小提琴 http jsfiddle net 9rkrahm6 我有一个
  • 使用 vscode 调试器调试 next.js

    我已经使用安装了一个项目创建下一个应用程序 https github com segmentio create next app 我需要使用我的编辑器 vscode 调试服务器端渲染 所以我访问过vscode recipes 如何调试 ne
  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中

随机推荐

  • realUrl 不为默认语言编写 preVar

    我在 TYPO3 4 5 26 上运行 realURL 1 12 6 我习惯于 realURL 创建包含 preVar 的路径 也适用于默认语言 例如 www example com de seite 和 www example com e
  • iOS 13中如何获取状态栏高度?

    在 iOS 13 中UIApplication shared statusBarFrame height warns iOS 13 0 中已弃用 statusBarFrame 使用 statusBarManager 而是窗口场景的属性 如何
  • Jenkins 不执行 Jenkinsfile 中的步骤

    为什么 jenkins 不执行我的 jenkinsfile 我的构建的控制台输出是这样的 20 06 19 Started by GitLab push by 20 06 19 Building in workspace var jenki
  • 向文本输入添加默认值 Angular 2

    背景 我有一个表单 其中的输入字段包含用户的电子邮件地址 我正在使用插值将电子邮件添加到placeholder field Problem 我不希望用户能够更改此字段中的电子邮件地址 我只希望他们能够看到它 但我确实希望它与表格一起发布 Q
  • Firebase RecyclerView 未加载新数据

    每次用户将项目添加到 Firebase 中的某个数据库引用时 我都会尝试创建一个实时 RecyclerView 这是我的模型类 IgnoreExtraProperties public class Poll private String q
  • 无法使用 Xuggler 对视频进行编码

    我正在尝试使用 Xuggler 创建简单的应用程序 它必须将图片序列编码为视频 我已经安装了 xuggler 如官方网站所述 这是代码示例 我实际上是在 Xuggler wiki 网站上找到的 import java awt Color i
  • Python 中十六进制数的二进制补码

    下面的a和b 十六进制 代表有符号二进制数的补码 例如 a 0x17c7cc6e b 0xc158a854 现在我想知道 a 和 b 以 10 为基数的有符号表示 抱歉 我是一名低级程序员 并且是 python 新手 觉得问这个问题很愚蠢
  • UITextField - 当应用程序来自后台时键盘不会隐藏

    在我的 iOS 应用程序中 我在视图底部有 UITextfield 因此 当用户开始输入文本时 我向上滑动视图 以便用户可以看到他们正在输入的内容 输入文本时 视图向上移动 然后按主页按钮 应用程序进入后台 现在点击应用程序的图标 它将应用
  • 如何在 Swift 中仅从共享扩展启动应用程序而不弹出弹出窗口?

    我是 iOS 应用程序开发的初学者 我想通过从另一个应用程序复制链接来启动我的应用程序 添加共享扩展 单击它会显示弹出窗口 但我的要求是它不应该显示弹出窗口并在单击我的共享扩展时直接打开我的应用程序 我做了什么 1 在info plist中
  • 如何为 Django 建立 nginx 虚拟服务器 + fcgi?

    我想通过 nginx 运行多个虚拟主机 每个虚拟主机通过 fcgi 提供不同的 django 应用程序 这可能吗 如果是这样 有人有关于从哪里 如何开始的良好资源吗 nginx 文档似乎主要是示例 但没有我正在尝试的特定配置 最近有两篇关于
  • 最好的 Emacs 工作区插件是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过工作区 我的意思是 我需要保存打开缓冲区的状态 可能在用户指定的工作区文件中 并快速切换到另一组打开缓冲区 例如继续处理与另一个项目相关的文
  • 使用wix工具集安装多个exe

    我有三个产品 其安装程序位于 exe 文件中 假设这三个产品的安装程序是 产品 A exe 产品 B exe 产品 C exe 我想使用 wix 工具集创建一个 msi 文件 它将安装这三个 exe 安装程序 做这个的最好方式是什么 我还想
  • Ghostscript 无法在 php 中工作

    我想创建将 pdf 文件的第一页转换为 jpg 图像的 php 页面 我有这些代码 exec 转换 密度300 24 pdf 0 24 1 jpg output print r array values output 它不起作用 我已经测试
  • 是否可以在 IIS 之外的独立应用程序中托管 ASPX 网页

    我在桌面上有一个厚重的 GUI 应用程序 可能作为服务运行 但也可以作为普通应用程序运行 我想向应用程序公开一个 Web 界面 以便对应用程序进行一些远程监视和控制 我目前正在托管一个 WCF 服务 该服务仅在应用程序中返回 HTML 该服
  • Apple Mach-O 链接器警告未找到目录

    我花了最后五个小时为这种奇怪的情况寻找合理的解释 这是警告 ld warning directory not found for option L Users oasis weng Desktop My Life Life For Myse
  • Centos 上的 MSBuild 返回“未找到导入的项目“/Microsoft.Cpp.Default.props””

    我正在尝试在 CentOS 中构建 VS 项目 我通过安装 dotnet sdk 2 2yum install dotnet sdk 2 2 执行时dotnet msbuild myproj vcxproj I get Microsoft
  • 将数据框名称分配给列中的所有行

    我想为列表中的每个数据框将数据框名称添加到列中的所有行 虚拟数据 test df lt data frame x 1 5 y c a b c d e 我想要的最终结果是这样的 x y ref 1 a test df 2 b test df
  • 条件断点不起作用

    上面的代码在其底行设置了一个黄色的条件断点 后面是 断点设置 对话框 该对话框应与以下内容一起使用 item Value 一天 但是我收到以下错误 我在网上搜索了此错误 但找不到任何失败的原因 我使用的是 VS 2015 Pro 编辑 感谢
  • 当方法签名包含 Object ... args 时,如何在 JSF 中使用动态代理

    我在使用 Spring JPA 和动态代理 DAO 类时遇到一些问题 这些类被初始化为 Spring Beans 这个特定的项目在持久性 事务方面一直困扰着我一段时间 我想一劳永逸地解决这个问题 首先 这是 DAO 接口的一个方法 Perf
  • switch 语句中如何出现 NaN 情况?

    Since NaN NaN评估为false 是否可以添加一个NaN案例到一个switch陈述 例如 假设我想进行以下切换 switch x case 1 case 2 case 4 doSomething break case NaN do