将运算符从字符串类型转换为运算符类型

时间:2013-09-08 02:42:41

标签: javascript jquery google-chrome-extension

我想随机生成这样的东西。

  

233 + 333 = 566

我的意思是第一个数字,运算符和第二个数字是随机生成的。

所以,我现在写了这段代码。

var x = parseInt(Math.random()*1000),
    y = parseInt(Math.random()*1000),
    operators = ['+', '-', '*', '/'],
    operatorNum = parseInt(Math.random()*4),
    operator = operators[operatorNum],
    result;

result = x + operator + y;

但这只是给我一些像"748/264"这样的字符串。 它没有给我生成计算的结果。

我想我需要将运算符从字符串转换为运算符类型。 但是,我认为没有运营商类型。

被修改

我正在构建Chrome扩展程序。根据Chrome扩展程序政策,我不允许使用eval功能。

3 个答案:

答案 0 :(得分:7)

JavaScript中没有内置的操作符函数,但您可以很容易地创建自己的函数:

var operators = {
    '+': function(a, b) {
        return a + b;
    },
    '*': function(a, b) {
        return a * b;
    },
    ....
};

然后致电相应的运营商:

operators['+'](4, 7);  // 11

但是在这里,你可以使用eval并将你的字符串视为JavaScript代码:

eval('2 + 2');  // 4

答案 1 :(得分:3)

评估它:

result = eval(x + operator + y);

修改

由于您无法使用eval,因此您需要构建自己的数学函数。您只需指定该数组中的四个函数(如果您实际上不需要知道它们的名称),例如:

myFunctions = [
    function(a, b){return a+b;}, 
    function(a, b){return a-b;}, 
    function(a, b){return a/b;}, 
    function(a, b){return a*b;}
];

然后随机选择一个并用x和y变量作为参数调用它,就像你之前做的那样:result = myFunctions[parseInt(Math.random()*4)](x, y);

答案 2 :(得分:2)

我认为这里的解决方案是使用eval()

result = eval(x + operator + y)

在这种情况下,使用eval是安全的,但Be warned - 使用<{3}}函数