为什么这个简单的switch语句总是运行默认值

时间:2019-06-15 21:52:02

标签: javascript switch-statement conditional-statements

好的,看来这个switch语句永远注定是行不通的。

最初的想法是创建一个提示变量x,用户必须选择输入任意数字,该数字就是x的值。

然后在开关的第一种情况下,如果x小于0.5,则它将简单地console.log“ less”。 如果x大于0.5,它将只是console.log“ more”。 如果由于某种原因程序无法按预期运行,则默认值为console.log“这是默认值”

然后我最后添加了一个x的console.log,只是想知道用户输入了什么数字。

尝试一下!

我反复尝试,无论我输入什么数字,始终打印“这是默认值”。然后打印x的值。

我最终选择了Rambo并删除了提示,并声明x为0.6。它应该打印“更多”,但仍然不会。

var x = 0.6;

switch (x) {
  case x < 0.5:
    console.log("less");
    break;
  case x > 0.5:
    console.log("more");
    break;

  default:
    console.log("its the dflt");
};

console.log(x);

所以我想知道这段代码有什么问题。帮助

3 个答案:

答案 0 :(得分:5)

switch将您switchcase进行比较。因此,如果您要运行case x < 0.5:,则如果您针对switched的表达式为true,则该情况将运行:

var x = 0.6;

switch (true) {
  case x < 0.5:
    console.log("less");
    break;
  case x > 0.5:
    console.log("more");
    break;

  default:
    console.log("its the dflt");
};

console.log(x);

如果您针对switch本身x,则case仅在案例的评估结果与x相同,即{{1 }},例如:

0.6

但这根本不够灵活,不是您想要的。

我个人更喜欢var x = 0.6; switch (x) { case 0.6: console.log('x is exactly 0.6'); break; default: console.log("x is something other than 0.6"); }; console.log(x); / if,它更容易阅读(而且,正如评论中指出的那样,速度更快):

else

答案 1 :(得分:0)

Switch将x的值与案例的进行比较。在您的代码中,x < 0.5的值为true。开关案例不比较if语句那样的情况,而是比较xtrue。由于x是一个数字,x永远不会等于true,因此始终采用默认大小写。

在这种情况下,我将使用if语句代替开关。开关更适合枚举(检查x是否是一组值中的特定值,而不是值的范围)

答案 2 :(得分:0)

CertainPerformance已经很好地回答了您的问题,但是,如果您仍然不了解如何使用switch,我建议您使用“ if语句”,直到您有时间阅读有关使用switch的更多信息为止。

Config::set('kendo.totalCount', $this->count)

希望这对您来说更容易:)