如何使 javascript eval 将括号视为用于数学表达式?
这段代码,例如:
var a="(";
var b=")";
alert(eval(a+2+3+b))// returns 23 while I want to get an output of 5
如何使 javascript eval 将括号视为用于数学表达式?
这段代码,例如:
var a="(";
var b=")";
alert(eval(a+2+3+b))// returns 23 while I want to get an output of 5
该表达式在被调用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
我不知道,也许输入一个实际的算术运算符会有所帮助......
var a="(";
var b=")";
alert(eval(a+2+"+"+3+b));
这是正在发生的事情:
a
是一个字符串,字符串+
上的运算符也将添加的值转换为字符串,依此类推。
所以你要么做,要么做a+(2+3)+b
一个a+2+"+"+3+b
实际的添加。
我不知道,你是如何得到原始字符串的,但你可以将它构建成一个数组,一个字符一个字符,然后从数组中创建一个字符串。下面的代码片段只是一个简化的例子。
var a = '(',
b = ')',
stringToEval = [a, 2, '+', 3, b].join('');
alert(eval(stringToEval)); // alerts 5
您还可以使用concat
:
stringToEval = ''.concat(a, 2, '+', 3, b);
但我认为使用数组会是更动态的解决方案。
eval
接受一个字符串并将其评估为 javascript。在您的示例中,最终被解析的字符串是(23)
而不是(2+3)
. 要使 eval 正常工作,您需要做的是:
var a = "(";
var b = ")";
var c = "2+3";
alert(eval(a+c+b));
这简化为:
alert(eval("(2+3)"));