是否可以使用方程符号的变量?

时间:2013-06-01 16:23:48

标签: javascript jquery

假设我们有这样的代码:

var movement = setInterval(function() {
    var position = 0; // Just some example values
    var limit = 200;  // to go with the code below

    if (position < limit) {
        position = position + 10;
    }
}, 500);

是否可以使用变量替换<中的position < limit符号和+中的position + 10符号(这样代码当然可以正常工作)?

4 个答案:

答案 0 :(得分:7)

不完全是你可以使用功能图:

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

var cp = '<', op = '+';
if (comparators[op](position, limit)) {
     position = operators[op](position, 10);
}

您还可以将函数保留在变量中:

var cp = comparators['<'];
if (cp(position, limit)) {
    ...

除此之外:如果您希望将代码保持为DRY,则可以生成函数,例如运算符:

var operators = {};
'+*/-'.split('').forEach(function(v){
  operators[v]=eval('(function(a,b){return a'+v+'b})');
});

好的,这主要是为了好玩:)

答案 1 :(得分:1)

创建一个如下函数:

function process(left, op, right){
     var result;
     if(op == ">")
       result = left > right;
     else if(op == "<")
       result = left < right;
     else if(op == "+")
       result = left + right;
     else if(op == "-")
       result = left - right;
     return result;
}

if (process(position, "<", limit)) {
    position = process(position, "+", 10);
}

答案 2 :(得分:1)

<+只是二元运算符,因此您可以将它们视为对具有两个参数的函数的调用。

E.g:

var movement = setInterval(function() {
    var position = 0; // Just some example values
    var limit = 200;  // to go with the code below

    if (func1(position, limit)) {
        position = func2(position, 10);
    }
}, 500);

然后你可以定义func1和func2,或者甚至是指向函数的变量。

E.g:

var func1 = function(leftHandSide, rightHandSide) {
   return leftHandSize < rightHandSide;
}

答案 3 :(得分:1)

这可能是我想的另一种方式:

http://jsfiddle.net/D9yqK/

var position = 0; 
var limit = 200; 
var x = '<'; // == , >= , <=, etc...
if(new Function('return '+position+x+limit)()) alert('ok');