有没有办法生成一个条件表达式,可以直接执行if?

时间:2016-03-01 09:06:13

标签: javascript if-statement conditional-statements

例如,我可以创建一个方法,它可以返回一个可以用if?

评估的表达式
lang

然后直接使用

function getCondition(variable, value, operator)//not sure what params to pass
{
   var condition = false; //initialized to false
   //generate condition based on parameter passed
   return condition;
}

6 个答案:

答案 0 :(得分:2)

在您的示例中,可能不是您的实际用例,您只需映射您的运营商:

function getCondition( x, y, op ) {
  switch ( op ) {
    case '<':
      return x < y
    case '>':
      return x > y
    default:
      throw new Error( 'operator not understood' )
  }
}

if ( getCondition( 1, 5, '<' ) ) {
  ...
}

您可能会在物理模拟中看到这种模式,您需要本机不存在的运算符,例如dotcross个产品。我从来没有见过一个用例,你想要将该运算符明确地传递给一个函数,而只是创建每个运算符所需的函数。

答案 1 :(得分:1)

您可以将表达式作为参数传递

&#13;
&#13;
var a = 3.5;

function getCondition(bool) {
    var condition = false;
    return bool || condition
}

if (getCondition(a < 5)) {
  console.log("correct")
}
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可能希望在应用条件时评估参数,而不是在定义条件时。这是一种可能性:

var operator = {};

operator.greaterThan = function(val) {
    return function(x) {
        return x > val;
    }
};

operator.lessThan = function(val) {
    return function(x) {
        return x < val;
    }
};

isLessThan5 = operator.lessThan(5);


a = 4;
if(isLessThan5(a)) console.log('ok'); else console.log('not ok');

b = 10;
if(isLessThan5(b)) console.log('ok'); else console.log('not ok');

对于复杂条件,您还可以添加布尔运算符:

operator.and = function() {
    var fns = [].slice.call(arguments);
    return function(x) {
        return fns.every(f => f(x));
    }
};

operator.or = function() {
    var fns = [].slice.call(arguments);
    return function(x) {
        return fns.some(f => f(x));
    }
};

isBetween5and10 = operator.and(
    operator.greaterThan(5),
    operator.lessThan(10));


if(isBetween5and10(8)) console.log('ok')
if(isBetween5and10(15)) console.log('ok')

答案 3 :(得分:0)

是的,但你必须在函数中定义运算符的含义。所以你的函数需要包含一些代码:

eval

你也可以使用字符串连接和condition = eval(value1 + operator + value2); ,但我不推荐它:

Map

答案 4 :(得分:0)

是的,如果可以将其评估为true或false,则可以使用方法的返回值。

您提供的示例代码应该按预期工作。

方法的返回值也可以从int或字符串计算到布尔值。在此处详细了解:JS Type Coercion

答案 5 :(得分:0)

可以将函数或表达式传递给if。就像你自己说的那样,if接受一个表达式......评估为真或假。因此,您可以创建任何返回布尔值的函数或方法(在PHP和其他弱类型语言中不完全正确)。

显然,由于PHP没有强类型,因此没有函数可以保证它返回一个布尔值,所以你需要自己正确地实现它,因为这样做会让你容易出错。