JavaScript-将布尔(或按位)运算符作为参数传递?

时间:2019-04-29 02:52:35

标签: javascript bitwise-operators boolean-operations

在C#中,有多种方法可以实现此C# Pass bitwise operator as parameter,特别是“ Bitwise.Operator.OR”对象,但是可以在JavaScript中完成类似的事情吗?例如:

function check(num1, num2, op) {
    return num1 op num2; //just an example of what the output should be like
}

check(1,2, >); //obviously this is a syntax error, but is there some kind of other object or bitwise operator of some kind I can plug into the place of ">" and change the source function somehow?

4 个答案:

答案 0 :(得分:4)

您可以使用键作为运算符,将值作为函数来创建对象。您需要使用括号表示法才能访问这些功能。

对于some()every(),两个以上的参数可以使用Rest参数以及&&||

对于按位运算符或+,-,*,/多个值,可以使用reduce()

const check = {
  '>':(n1,n2) => n1 > n2,
  '<':(n1,n2) => n1 < n2,
  '&&':(...n) => n.every(Boolean),
  '||':(...n) => n.some(Boolean),
  '&':(...n) => n.slice(1).reduce((ac,a) => ac & a,n[0])
}

console.log(check['>'](4,6)) //false
console.log(check['<'](4,6)) /true
console.log(check['&&'](2 < 5, 8 < 10, 9 > 2)) //true

console.log(check['&'](5,6,7)  === (5 & 6 & 7))

答案 1 :(得分:1)

怎么样?

 function binaryOperation( obj1, obj2, operation ) {
     return operation( obj1, obj2 );
 }
 function greaterThan( obj1, obj2 ) {
    return obj1 > obj2 ;
 }
 function lessThan( obj1, obj2 ) {
    return obj1 < obj2 ;
 }
 alert( binaryOperation( 10, 20, greaterThan ) );
 alert( binaryOperation( 10, 20, lessThan ) );

答案 2 :(得分:0)

您可以做链接的答案所建议的完全相同的事情:

function check(num1, num2, op) {
  return op(num1, num2);
}

// Use it like this
check(3, 7, (x, y) => x > y);

您还可以创建一个提供所有这些操作的对象:

const Operators = {
  LOGICAL: {
    AND: (x, y) => x && y,
    OR: (x, y) => x || y,
    GT: (x, y) => x > y,
    // ... etc. ...
  },
  BITWISE: {
    AND: (x, y) => x & y,
    OR: (x, y) => x | y,
    XOR: (x, y) => x ^ y,
    // ... etc. ...
  }
};

// Use it like this
check(3, 5, Operators.BITWISE.AND);

答案 3 :(得分:0)

不可能。但是,您可以通过以下方法来实现此目的的一种方法:

    kind: Service
    apiVersion: v1
    metadata:
      name: node-server1-service
    spec:
      selector:
         app: node-server1
      ports:
      - protocol: TCP
        port: 5551

但是在传递function evaluate(v1, v2, op) { let res = "" + v1 + op + v2; return eval(res) } console.log(evaluate(1, 2, "+")); # outputs 3 时要小心,因为它们会被评估,如果将一些骇人的代码传递给函数,这将很危险。