Bitmasks vs if..then在JavaScript中

时间:2016-09-09 07:04:51

标签: javascript bitwise-operators

我正在开发一个在不同地方包含大量标记检查的应用,例如

if (a && b && c) { func1() } 
else if (a && !b && c) { func2() }
else if (!a && b && !c) { func3() }
...

有时会发生一次序列中可能有10次检查。

如果对我进行超过3次检查,这看起来相当笨重。 我读到了按位操作和bitmasks technique,我认为这可以给我一个优雅的解决方案。

尽管如此,我想知道在不同级别的程序员工作的现实项目中使用这些实践是否是一种好习惯。尽量不要成为智能手机,但为了使代码更易于阅读,我应该继续使用if...else还是应该开始使用按位运算?

2 个答案:

答案 0 :(得分:0)

是的,我认为按位是更好的解决方案。

const ACTIONS = {
  0: func0,
  1: func1,
  2: func2,
  3: func3,
  4: func4
  // ...
}

ACTIONS[a | b | c]()

答案 1 :(得分:0)

您可能会发现使用带有二进制文字switch块作为案例标签更清楚:

switch (foo){
case 0b111: /*corresponds to true-like a, b, and c*/
    func1();
    break;
case 0b101: /*corresponds to true-like a and c*/
    func2();
    break;

等,其中fooabc的适当函数,可能使用类4 * a + 2 * b + c生成。