例如,我可以创建一个方法,它可以返回一个可以用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;
}
答案 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, '<' ) ) {
...
}
您可能会在物理模拟中看到这种模式,您需要本机不存在的运算符,例如dot
或cross
个产品。我从来没有见过一个用例,你想要将该运算符明确地传递给一个函数,而只是创建每个运算符所需的函数。
答案 1 :(得分:1)
您可以将表达式作为参数传递
var a = 3.5;
function getCondition(bool) {
var condition = false;
return bool || condition
}
if (getCondition(a < 5)) {
console.log("correct")
}
&#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没有强类型,因此没有函数可以保证它返回一个布尔值,所以你需要自己正确地实现它,因为这样做会让你容易出错。