-1

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

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功能。

4

3 回答 3

9

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
于 2013-09-08T02:48:36.610 回答
4

评估它:

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

于 2013-09-08T02:45:09.830 回答
2

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

result = eval(x + operator + y)

在这种情况下,使用 eval 是安全的,但要注意- 这是一个危险的函数

于 2013-09-08T02:45:22.203 回答