当涉及JavaScript时,我是一个新手,我的理解是使用一个SWITCH/CASE语句比使用一堆IF语句更快。
然而,我想使用一个包含两个变量的SWITCH/CASE语句。
我的Web应用有两个滑块,每个滑块有五种状态。我希望行为是基于这两个变量的状态。显然,这是许多IF/THEN语句。
我想到的一种方法是将两个变量连接成一个,然后我可以使用SWITCH/CASE语句。
是否有更好的方法来使用两个变量进行SWITCH/CASE操作?
谢谢!
当涉及JavaScript时,我是一个新手,我的理解是使用一个SWITCH/CASE语句比使用一堆IF语句更快。
然而,我想使用一个包含两个变量的SWITCH/CASE语句。
我的Web应用有两个滑块,每个滑块有五种状态。我希望行为是基于这两个变量的状态。显然,这是许多IF/THEN语句。
我想到的一种方法是将两个变量连接成一个,然后我可以使用SWITCH/CASE语句。
是否有更好的方法来使用两个变量进行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;
}
我同意其他人的看法,使用switch-case逻辑处理25个情况并不太美观,有时候if-else可能“看起来”更好。无论如何。
|
还是双个 ||
? - itsazzadvar var1 = "something";
var var2 = "something_else";
switch(var1 + "|" + var2) {
case "something|something_else":
...
break;
case "something|...":
break;
case "...|...":
break;
}
如果每个选项有5种可能性,那么你将得到25种情况。
if
... - BlueRaja - Danny Pflughoeftvar1 = "something|something_else";
和 var2 = "";
- Brian Hannay|
,那么情况将变成 "something|something_else|"
. 虽然不是很好,但我的答案假设您完全控制 var1
和 var2
. 如果您假设没有完全控制它们,那你的答案会是什么? - Halcyon首先,JavaScript 中的 switch
和 if/else
相比速度并没有更快(有时甚至更慢)。
其次,使用 switch
处理多个变量的唯一方法是将它们合并为一个原始值(字符串、数字等):
var stateA = "foo";
var stateB = "bar";
switch (stateA + "-" + stateB) {
case "foo-bar": ...
...
}
但是,就个人而言,我更愿意看到一组if
/else
语句。
编辑:当所有值都是整数时,似乎在Chrome中使用switch可以比if/else更快。请参见评论。
switch
、else if
和 {}
中最有效的选项。当经常进行检查时,创建哈希表的开销变得可以忽略不计。它在长期运行中胜过了 switch
和 else if
。 - Rob W我不相信switch/case比一系列的if/elseif更快。它们做相同的事情,但是if/elseif可以检查多个变量。你不能在一个值上使用switch/case。
如果每个组合的行为都是静态的,您可以构建一个二维数组:
var data = [
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20],
[21,22,23,24,25]
];
var info = data[firstSliderValue][secondSliderValue];
是的,但不是以普通的方式。您将需要使用 switch 作为闭包。
例如:
function test(input1, input2) {
switch (true) {
case input1 > input2:
console.log(input1 + " is larger than " + input2);
break;
case input1 < input2:
console.log(input2 + " is larger than " + input1);
default:
console.log(input1 + " is equal to " + input2);
}
}
我是这样做的:
switch (valueA && valueB) {
case true && false:
console.log(‘valueA is true, valueB is false’)
break;
case ( true || false ) && true:
console.log(‘valueA is either true or false and valueB is true’)
break;
default:
void 0;
}
var1|var2
可能是一种非常快速的方法。不过,我们需要看看您正在做什么的一些示例... - Michael Berkowski