-1

如何使 javascript eval 将括号视为用于数学表达式?

这段代码,例如:

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

4 回答 4

6

该表达式在被调用a+2+3+b之前被评估eval。您实际上是在调用:

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

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

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

至于你的问题:

如何使 javascript eval 将括号视为用于数学表达式?

你不需要做任何事情。括号中的子表达式必须在其值用于整个表达式之前进行完全计算,因此括号中的任何内容都将首先被计算。前任。(就像您对运算符的代数顺序所期望的那样):

2*(0+3) // 6
2* 0+3  // 3
于 2013-07-15T18:31:03.247 回答
4

我不知道,也许输入一个实际的算术运算符会有所帮助......

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

这是正在发生的事情:

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

所以你要么做,要么做a+(2+3)+b一个a+2+"+"+3+b实际的添加。

于 2013-07-15T18:31:14.380 回答
1

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

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

您还可以使用concat

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

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

于 2013-07-15T18:52:26.387 回答
0

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

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

这简化为:

alert(eval("(2+3)"));
于 2013-07-15T18:34:04.057 回答