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)
如果有,那是什么?
是的,有区别.考虑你的例子,
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声明可能是有用的.然而,这种情况很少见.