我有以下数组。
var signs = ['+', '-', '*', '/'];
跟随变量添加上面的数组中的每个符号。
var right_digit = 1;
var left_digit = 5;
我可以在JS中执行类似下面的操作吗?
var answer = left_digit sign[0] right_digit;
答案 0 :(得分:8)
如果你想避免使用eval,你可以这样做:
var signs = {
'+': function(op1, op2) { return op1 + op2; },
...
};
var answer = signs['+'](left_digit, right_digit);
答案 1 :(得分:3)
我很确定你不能这样做,但你可以做一个能做到这一点的功能。
function action(a, b, c) {
switch (c) {
case "+":
return a+b;
case "-":
return a-b;
case "*":
return a*b;
default:
return a/b;
}
}
答案 2 :(得分:0)
如果您希望以这种方式动态评估运算符,则可以使用eval
:
var answer = eval(right_digit + sign[0] + left_digit);
请注意,不推荐使用`eval,因为潜在的安全问题(如果数据不受信任)并且速度慢,因为每次执行代码时都必须对代码进行分析。
更好的方法是使用这样的switch
:
function calculate(a, operator, b) {
switch (operator) {
case "+":
return a + b;
case "-":
return a - b;
case "*":
return a * b;
case "/":
return a / b;
}
}
var answer = calculate(right_digit, sign[0], left_digit);
答案 3 :(得分:0)
您可以使用eval:
var answer = eval(left_digit + sign[0] + right_digit);
答案 4 :(得分:0)
安全的eval
解决方案(会过滤数字并签名,如果不是那种格式,则会抛出错误):
function calculate(expr) {
var matches = /^(\d+)([+\-*/])(\d+)$/.exec(expr);
if(!matches) {
throw "Not valid";
}
return eval(matches[1] + matches[2] + matches[3]);
}
calculate('2*4'); // 8
所以你可以这样做:
calculate(left + sign + right);