【问题标题】:jQuery if statement with variable mathematical operator [duplicate]带有可变数学运算符的jQuery if语句[重复]
【发布时间】:2012-10-18 18:16:10
【问题描述】:

所以我正在寻找类似于这个问题python if statement with variable mathematical operator 但在 jQuery/Javascript 中的东西

基本上类似于

var one = "4";

var two = "6";

var op = "==";

if (one op two) {
//do something
}

这可能吗?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    你可以定义很多二进制函数:

    var operators = {
        "==": function(a,b){return a==b;},
        "<=": function(a,b){return a<=b;},
        ">=": function(a,b){return a>=b;},
        "<": function(a,b){return a<b;},
        ">": function(a,b){return a>b;},
        …
    };
    
    var one = "4",
        two = "6",
        op = "==";
    if (op in operators && operators[op](+one, +two)) {
        //do something
    }
    

    如果您不想生成这么大的对象并且没有复杂的功能,您也可以即时生成它们(使用一点eval 魔法):

    var validOps = /^([!=<>]=|<|>)$/,
        operators = {};
    function check(op, x, y) {
        if (arguments.length > 1)
            return check(op)(x, y);
        if (op in operators)
            return operators[op];
        if (validOps.test(op))
            return operators[op] = new Function("a","b","return a "+op+" b;");
        return function(a, b){return false;};
    }
    
    if (check("==", 4, 6)) {
        // do something
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用eval(),但它应该是一个可以评估为 javascript 以获得所需结果的字符串。

      Live Demo

      if (eval(one + op + two)) {
          //do something
      }
      

      【讨论】:

      • eval 上的常规警告...要小心,确保你知道你的评估是什么
      • 这行得通,但我以前从未使用过 eval ......它有什么问题?
      • 不要使用 eval。至少,使用eval("one"+op+"two") 这样你只需要处理验证操作数
      • 无需对这个答案投反对票。这是完全正确的....但它使用 eval.. @user1735913 你可以例如。看这里..stackoverflow.com/questions/4270597/why-not-eval-json
      • 不是我的反对意见,但任何提及 eval 的内容通常都会让您至少获得一个。 @user1735913 详细了解 eval 的弊端 stackoverflow.com/questions/86513/…
      【解决方案3】:

      如果您想对两个变量执行一个操作(也称为函数),那么您只需定义它:

      var operations,
          a,
          b,
          op;
      operations = {
          '==': function (a, b) {
              return a == b;
          },
          '&&': function (a, b) {
              return a && b;
          },
          '||': function (a, b) {
              return a || b;
          }
      };
      a = 4;
      b = 6;
      op = operations['=='];
      if (op(a, b)) {
          //do stuff
      }
      

      【讨论】:

        【解决方案4】:

        我最近需要这样的东西,最后写了一个函数来解析运算符。

        类似:

        function checkLogic(one, op, two) {
            switch(op) {
                case '==':
                    return one == two;
                // etc
            }
        }
        

        【讨论】:

          【解决方案5】:

          您可以为此使用 Eval

           if(eval(one+op+two)){
          //do something
          }
          

          【讨论】:

          • ...这显然就是它存在的原因。 ://
          猜你喜欢
          • 2012-08-04
          • 1970-01-01
          • 1970-01-01
          • 2014-02-17
          • 1970-01-01
          • 2017-10-20
          • 2015-04-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多