2012-10-18 42 views

回答

11

你可以定義很多二元函數:

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 
} 
1

您可以使用eval(),但它應該是一個字符串,可以評估爲JavaScript以獲得所需的結果。

Live Demo

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

經常警告...是小心並確保你知道你的評價 – jdennison

+0

投票的理由? – Adil

+0

好吧,這個工程,但我從來沒有使用eval之前......它有什麼問題呢? – thisuser

0

我最近需要這樣的東西,最後寫了一個函數來解析操作符。

喜歡的東西:

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

如果你有一個操作(否則作爲功能),你想對兩個變量進行,那麼你只需要定義它:

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 
} 
-2

您可以使用eval對這個EVAL

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

eval是**邪惡** –

+0

...這顯然是爲什麼它存在。 :/ –