变量运算符可能吗?

IT技术 javascript variables operators operator-keyword dynamic-variables
2021-01-12 21:35:53

有没有办法做类似于以下任何一项的事情:

var1 = 10; var2 = 20;
var operator = "<";
console.log(var1 operator var2); // returns true

- 或者 -

var1 = 10; var2 = 20;
var operator = "+";
total = var1 operator var2; // total === 30
6个回答

不是开箱即用的。但是,在包括 JS 在内的许多语言中手动构建都很容易。

var operators = {
    '+': function(a, b) { return a + b },
    '<': function(a, b) { return a < b },
     // ...
};

var op = '+';
alert(operators[op](10, 20));

plus如果不需要,您可以使用基于 ascii 的名称,例如, 以避免遍历字符串。然而,有一半类似于这个问题的问题被问到了,因为有人有代表运算符的字符串并想要它们的函数。

我相信你想要一个变量运算符。这是一个,创建为对象。您可以通过更改以下内容来更改当前操作:

[yourObjectName].operation = "<" //changes operation to less than


function VarOperator(op) { //you object containing your operator
    this.operation = op;

    this.evaluate = function evaluate(param1, param2) {
        switch(this.operation) {
            case "+":
                return param1 + param2;
            case "-":
                return param1 - param2;
            case "*":
                return param1 * param2;
            case "/":
                return param1 / param2;
            case "<":
                return param1 < param2;
            case ">":
                return param1 > param2;
        }
    }
}

//sample usage:
var vo = new VarOperator("+"); //initial operation: addition
vo.evaluate(21,5); // returns 26
vo.operation = "-" // new operation: subtraction
vo.evaluate(21,5); //returns 16
vo.operation = ">" //new operation: ">"
vo.evaluate(21,5); //returns true

您可以使用该eval()功能,但这不是一个好主意。我认为更好的方法是为您的运算符编写函数,如下所示:

var addition = function(first, second) {
   return first+second;
};

var subtraction = function(first, second) {
   return first-second;
};

var operator = addition;

alert(operator(12, 13));

var operator = subtraction;

alert(operator(12, 13));

我们可以使用 来实现这一点eval,因为我们将它用于运算符检查。

var number1 = 30;
var number2 = 40;
var operator = '===';

function evaluate(param1, param2, operator) {
  return eval(param1 + operator + param2);
}

if (evaluate(number1, number2, operator)) {}

通过这种方式,我们可以使用动态运算符评估。

谢谢!!!!!!!!我喜欢这种方法。干净多了
2021-04-07 21:35:53

你不能在 JavaScript 中重载运算符。你当然可以使用函数来帮助

var plus = function(a, b) {
    return a + b;
};

var smaller = function(a, b) { 
    return a < b;
};

var operator = plus;
var total = operator(a, b);
operator = smaller;
if(operator(var1, var2)){ /*do something*/ }