字符串数组中的Javascript算术运算符

时间:2011-10-31 21:21:06

标签: javascript math

我有以下数组。

var signs = ['+', '-', '*', '/'];

跟随变量添加上面的数组中的每个符号。

var right_digit = 1;
var left_digit = 5;

我可以在JS中执行类似下面的操作吗?

var answer = left_digit sign[0] right_digit;

5 个答案:

答案 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);