【发布时间】:2021-10-23 06:02:17
【问题描述】:
我有以下字符串表达式:
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("return " + string_expression)();
....我收到以下错误:
Uncaught SyntaxError: Unexpected token 'var'
为什么会有不同的行为?出于安全原因,我正在寻找eval() 的替代方法,并认为Function 方法与字符串表达式相同。在解析字符串表达式方面是否有更好的替代 eval() 的方法?
【问题讨论】:
-
当你将
"return"连接到string_expression时,它变成了"return var sum = 0;"...,这是无效的JS。 -
在
string_expression的末尾,将alert(sum)更改为return sum,并且不要将任何内容连接到string_expression的开头。
标签: javascript function security scripting eval