如何在JS中切换案例?什么意思切换(真)?

时间:2018-04-10 16:39:53

标签: 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

2 个答案:

答案 0 :(得分:4)

JavaScript中的切换只是比较case的值是否与===(在这种情况下为switch内)严格相等(true)。这通常用于比较字符串,但布尔值也可以使用,尽管它不太常见。请看以下示例:

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(如果无法解析输入)。虽然数字可以是真实的,但它绝不会严格true。这就是为什么你的函数总是返回'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';

答案 1 :(得分:0)

它会执行评估为case的第一个true。如果case不是true,则会执行default

例如:



switch (true) {
  case 1 === 1:
    console.log('ok1');
    break;
  case 2 === 2:
    console.log('ok2');
    break;
  default:
    console.log('not ok');
}



 将console.log('ok1')