javascript - switch case 在 JS 中是如何工作的? switch(true) 是什么意思?

标签 javascript switch-statement

我目前正在做一个项目,其中有一些我不明白的代码。您可以在下面看到其中之一(用 JS 编写):

  switch (true) {
    case parseInt(data):
      return 'data';

    case parseInt(row):
      return 'row';

    default:
      return 'default';
  }

我创建了 JSFiddle 来测试这个 switch(true) 语句并查看它的行为方式。它始终返回“默认”字符串。有人可以向我解释一下那里发生了什么吗?
JSFiddle switch test

最佳答案

JavaScript 中的 switch 只是比较 case 的值是否严格等于 (===) 与 switch 内的值 (在本例中为true)。这通常用于比较字符串,但 bool 值也可以工作,尽管不太常见。举个例子:

switch (true) {
    case 1 + 1 === 3:
        return 'A';
    case 2 * 2 === 4:
        return 'B';
    default:
        return 'C';
}

此代码将返回 'B',因为它是第一个匹配 true 的情况。如果没有任何情况与 true 匹配,它将返回 'C'


关于您的具体场景;我建议将您的代码重写为以下内容:

if (parseInt(data) === true) {
    return 'data';
}

if (parseInt(row) === true) {
    return 'row';
}

return 'default';

此代码执行的操作与您的完全相同,但读者可以立即清楚发生了什么。

我不确定您使用此功能的目标是什么,因此我无法推荐解决您问题的最佳方法。不过,我可以向您解释为什么它可能不起作用。

parseInt 函数将始终返回一个数字或 NaN(以防输入无法解析)。尽管数字可能是真实的,但它永远不会是严格的真实。这就是为什么你的函数总是返回'default'。再说一遍,我不知道您的目标是什么,但您可能想检查该值是否为真,而不是true:

if (parseInt(data)) {
    // Data can be parsed to a number and is not 0 
    return 'data';
}

if (parseInt(row)) {
    // Row can be parsed to a number and is not 0
    return 'row';
}

return 'default';

关于javascript - switch case 在 JS 中是如何工作的? switch(true) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49758851/

相关文章:

javascript - Node.js单线程与并发

javascript - 如何根据 MongoDB 中文档的内容对数组进行排序

ruby - 如何在 Ruby 中编写 switch 语句

C 代码,输入数字时显示 LED

javascript - JavaScript 中的方法对象

javascript - 如何使用 Grails Controller 中的 JSON 填充选择框

javascript - 如何处理 redux 应用程序中 react-router 路由中的无效 ID?

java - 如何使用循环遍历图像

c++ - 结构成员的模板函数

jQuery - 切换两个开关但不能同时切换两个?