用javascript中的变量替换运算符

时间:2012-04-03 07:31:40

标签: javascript operators

我试图用变量替换一些数学运算符,以便我可以根据某些条件更改运算符,然后使用该变量代替运算符。

例如

var abc = 5;
if (abc<5)
// perform subtraction;
else if(abc==5)
// perform addition;
else if(abc>5)
// perform multiplication

现在我想要的是改为基于变量abc的值执行操作 将操作符自身分配给某个变量,然后使用该变量代替操作符,这样我就可以减少一些代码,只能使用一个代码块来代替3或5个块。 像这样的东西

var sign;
var result;
if(some condition)
sign = "-";
result = 5 sign 4;

我想主要在javascript中这样做。

5 个答案:

答案 0 :(得分:11)

使用您想要执行的操作符重构几个操作到不同的函数,然后您可以根据您想要做的事情(策略模式)传递不同的函数

工作示例:

function multiply(a, b) {
    return a * b;
}
function substract(a, b) {
    return a - b;
}
function add(a, b) {
    return a + b;
}

var sign;
var result;
var abc = 10;
if( abc < 5 ) {
    sign = substract;
}else if( abc == 5 ) {
    sign = add;
}else if( abc > 5  ) {
    sign = multiply;
}

result = sign(5, 4);

答案 1 :(得分:1)

JavaScript不允许将运算符作为值传递。

您可能会做的是分配一个使用您想要的特定运算符的函数:

function add(a, b) { return a + b; }
function subt(a, b) { return a - b; }
function mult(a, b) { return a * b; }

var abc = 5, oper;

if (abc > 5)
    oper = subt;
else if (abc == 5)
    oper = add;
else
    oper = mult;

alert(oper(4, 3));

答案 2 :(得分:1)

您不能将运算符作为第一类对象传递。你可以推动弦乐,但它会变得丑陋。不幸的是,这不是Lisp。但是,运算符只是看起来很漂亮的函数。只需使用功能。您可以将条件语句放在这些函数中,或者只是覆盖它们

var abc = 5;
var compare = function (x,y) {
  return x > y;  
};

if (compare(abc,5)) {
// perform subtraction
}

您可以将函数分配给变量并使用它们。如果愿意,您可以稍后覆盖这些功能。

// We can override compare with some other function
compare = function (x,y) {
    return x < y;
}

答案 3 :(得分:0)

在JavaScript中,函数是第一类对象。您可以像创建任何其他值一样创建它们并传递它们。也许,你想要一个总是在其操作数上加5的“运算符”:

var addFive = function(operand){ return operand + 5; };
addFive(1) == 6;
addFive(5) == 10;

此函数也可以作为参数传递给其他函数:

var higherOrder = function(number, operator){ return operator(number); };
higherOrder(1, addFive) == 6;
higherOrder(5, addFive) == 10;

答案 4 :(得分:-1)

您可以针对此特定情况使用eval

var  op = "";
if (abc>5)
    op = "-";
else if(abc==5)
    op = "+";
else
    op = "*";
if (op.length > 0)
    alert(eval("10" + op + "10"));

这将通过将运算符存储为字符串然后计算来基于abc的值对两个数字(在此示例中为10和10)执行“dynanic操作”。 / p>

Live test case