我有以下字符串表达式:
string_expression = "var sum = 0;nfor (var i = 0; i < 100; i++) {n var index = i + 1;n sum += (index / ((index * Math.sqrt(index + 1)) + ((index + 1) * Math.sqrt(index))))n}nalert(sum)
如果我使用eval(),它工作得很好:
eval(string_expression)
但是如果我使用Function,像这样:
Function("return " + string_expression)();
…我得到以下错误:
Uncaught SyntaxError: Unexpected token 'var'
为什么会有不同的行为?出于安全原因,我正在寻找eval()
的替代方案,并认为Function
方法将与字符串表达式相同。是否有更好的替代eval()
,在能够解析字符串表达式方面工作相同?
因为你给它们喂了不同的东西。return var sum = 0
是语法错误。对于类似的行为,省略return
。您的字符串表达式alert
而不是返回一个值:
var string_expression = "var sum = 0;nfor (var i = 0; i < 100; i++) {n var index = i + 1;n sum += (index / ((index * Math.sqrt(index + 1)) + ((index + 1) * Math.sqrt(index))))n}nalert(sum)";
Function(string_expression)()
如果你想让它返回值,你必须修改字符串;这里我把alert(sum)
改成了return sum
:
var string_expression = "var sum = 0;nfor (var i = 0; i < 100; i++) {n var index = i + 1;n sum += (index / ((index * Math.sqrt(index + 1)) + ((index + 1) * Math.sqrt(index))))n}nreturn sum;";
const sum = Function(string_expression)();
alert(sum);