我是 JavaScript 的新手,据我所知,使用一个 SWITCH/CASE 语句比使用一大堆 IF 语句要快。
但是,我想使用带有两个变量的 SWITCH/CASE 语句。
我的网络应用程序有两个滑块,每个滑块有五个状态。我希望行为基于这两个变量的状态。显然,这是一大堆 IF/THEN 语句。
我想到的一种方法是将两个变量连接成一个,然后我可以切换/大小写。
有没有更好的方法来使用两个变量来完成 SWITCH/CASE ?
谢谢 !
我是 JavaScript 的新手,据我所知,使用一个 SWITCH/CASE 语句比使用一大堆 IF 语句要快。
但是,我想使用带有两个变量的 SWITCH/CASE 语句。
我的网络应用程序有两个滑块,每个滑块有五个状态。我希望行为基于这两个变量的状态。显然,这是一大堆 IF/THEN 语句。
我想到的一种方法是将两个变量连接成一个,然后我可以切换/大小写。
有没有更好的方法来使用两个变量来完成 SWITCH/CASE ?
谢谢 !
是的,您也可以这样做:
switch (true) {
case (var1 === true && var2 === true) :
//do something
break;
case (var1 === false && var2 === false) :
//do something
break;
default:
}
这将始终执行 switch,就像 if/else 一样,但看起来更干净。只需继续检查 case 表达式中的变量即可。
按位运算符怎么样?您处理的不是字符串,而是“枚举”,它看起来更“优雅”。
// Declare slider's state "enum"
var SliderOne = {
A: 1,
B: 2,
C: 4,
D: 8,
E: 16
};
var SliderTwo = {
A: 32,
B: 64,
C: 128,
D: 256,
E: 512
};
// Set state
var s1 = SliderOne.A,
s2 = SliderTwo.B;
// Switch state
switch (s1 | s2) {
case SliderOne.A | SliderTwo.A :
case SliderOne.A | SliderTwo.C :
// Logic when State #1 is A, and State #2 is either A or C
break;
case SliderOne.B | SliderTwo.C :
// Logic when State #1 is B, and State #2 is C
break;
case SliderOne.E | SliderTwo.E :
default:
// Logic when State #1 is E, and State #2 is E or
// none of above match
break;
}
然而,我同意其他人的观点,切换案例逻辑中的 25 个案例并不太漂亮,并且 if-else 在某些情况下可能“看起来”更好。反正。
var var1 = "something";
var var2 = "something_else";
switch(var1 + "|" + var2) {
case "something|something_else":
...
break;
case "something|...":
break;
case "...|...":
break;
}
如果每个选项有 5 种可能性,您将得到 25 种情况。
首先,JavaScriptswitch
并不比 快if/else
(有时慢得多)。
其次,switch
与多个变量一起使用的唯一方法是将它们组合成一个原始值(字符串、数字等):
var stateA = "foo";
var stateB = "bar";
switch (stateA + "-" + stateB) {
case "foo-bar": ...
...
}
但是,就个人而言,我更愿意看到一组if
/else
语句。
编辑:当所有值都是整数时,似乎 switch 可以在 Chrome 中胜过 if/else。看评论。
我不相信 switch/case 比一系列 if/elseif 更快。他们做同样的事情,但如果/elseif 的你可以检查多个变量。您不能在多个值上使用 switch/case。