JavaScript中boolean switch语句的用途是什么?

thi*_*max 9 javascript if-statement coding-style switch-statement

我刚刚在其他人的JavaScript代码中遇到了一个boolean switch语句.它看起来有点像这样:

switch (a || b) {
  case true:
    // do some stuff
  break;
  default:
    // do other stuff
  break;
}
Run Code Online (Sandbox Code Playgroud)

我没有编程很长时间,但我以前从未见过这样的事情.这似乎有点愚蠢,但我想给程序员带来疑问.上述代码与以下代码之间是否存在任何功能差异:

if (a || b) {
  // do some stuff
}
else {
  // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

如果有,那是什么?

And*_*y E 8

是的,有区别.考虑你的例子,

var a = 0,
    b = 1;
Run Code Online (Sandbox Code Playgroud)

现在让我们来看看switch声明:

switch (a || b) {
Run Code Online (Sandbox Code Playgroud)

运行此switch语句时,将计算表达式a || b. ||如果是"truthy",它将返回左操作数的值,否则它将返回右操作数的值.在这种情况下,a = 0,因此b将返回(1).现在看一下case声明:

case true:
Run Code Online (Sandbox Code Playgroud)

在评估case语句时,不对任一值执行类型强制,并假定严格相等.在我们的示例中,这与写入相同1 === true,因此case语句后面的代码永远不会运行.那么让我们来看看if声明:

if (a || b) {
Run Code Online (Sandbox Code Playgroud)

对于一个if语句,条件表达式a || b求值,然后将结果转换成布尔.在内部,这看起来像ToBoolean(a || b).由于a || b对布尔值的求值1和强制,条件通过并执行块.1true

更好的等价物是:

if ((a || b) === true) {
    // do some stuff
}
else {
    // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

正如已经指出的那样,在许多情况和类型可能不同的情况下,switch声明可能是有用的.然而,这种情况很少见.