将括号视为js中的数学运算符

时间:2013-07-15 18:28:07

标签: javascript

如何将javascript eval用于处理括号,因为它用于数学表达式?

此代码,例如:

var a="(";
var b=")";
alert(eval(a+2+3+b))// returns 23 while I want to get an output of 5

4 个答案:

答案 0 :(得分:6)

在调用a+2+3+b之前评估表达式eval。你真的在呼唤:

alert(eval("(23)"));

您希望+传递给eval,它也需要是传递给eval的字符串的一部分:

alert(eval(2+"+"+3)); // 5

关于你的问题:

  

如何将javascript eval用于处理括号,因为它用于数学表达式?

你不需要做任何事情。必须先对括号中的子表达式进行全面评估,然后才能在整个表达式中使用该值,因此将首先计算括号中的任何内容。 EX。 (就像你期望的算子的代数顺序一样):

2*(0+3) // 6
2* 0+3  // 3

答案 1 :(得分:4)

我不知道,也许投入一个实际的算术运算符可以帮助......

var a="(";
var b=")";
alert(eval(a+2+"+"+3+b));

以下是发生的事情:

a是一个字符串,字符串上的+运算符也将添加的值转换为字符串,依此类推。

因此,要么a+(2+3)+ba+2+"+"+3+b要进行实际添加。

答案 2 :(得分:1)

我不知道,你是如何获得原始字符串的,但你可以逐个字符地将它构建成一个数组,然后从数组中创建一个字符串。以下代码段只是一个简化示例。

var a = '(',
    b = ')',
    stringToEval = [a, 2, '+', 3, b].join('');
alert(eval(stringToEval)); // alerts 5

您还可以使用concat

stringToEval = ''.concat(a, 2, '+', 3, b);

但我认为使用数组将是更具动态性的解决方案。

答案 3 :(得分:0)

eval接受一个字符串,并将其评估为javascript。在您的示例中,最终被解析的字符串是(23)而不是(2+3)。要使eval正常工作,您需要做的是:

var a = "(";
var b = ")";
var c = "2+3";
alert(eval(a+c+b));

简化为:

alert(eval("(2+3)"));