我试图用变量替换一些数学运算符,以便我可以根据某些条件更改运算符,然后使用该变量代替运算符。
例如
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中这样做。
答案 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>