如何将javascript eval用于处理括号,因为它用于数学表达式?
此代码,例如:
var a="(";
var b=")";
alert(eval(a+2+3+b))// returns 23 while I want to get an output of 5
答案 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)+b
或a+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)"));