位掩码与if.然后是JavaScript

Bitmasks vs if..then in JavaScript

本文关键字:JavaScript 然后 if 掩码      更新时间:2023-09-26

我正在制作一个应用程序,其中包含相当多的标志检查在不同的地方,如

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

有时在一个序列中可能有10次检查。

当有3张以上的支票时,这个看起来相当笨重。我读了位操作和位掩码技术,我认为它们可以给我一个优雅的解决方案。

虽然,我想知道在不同级别的程序员工作的真实项目中使用这些实践是否是一个好的实践。试着不成为一个聪明的家伙,但使代码更优雅,虽然易于阅读,我应该继续使用if...else或我应该开始使用位操作?

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

const ACTIONS = {
  0: func0,
  1: func1,
  2: func2,
  3: func3,
  4: func4
  // ...
}
ACTIONS[a | b | c]()

您可能会发现使用带有二进制字面值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;

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