Eval()与Function()在JavaScript中计算字符串表达式:不相同的行为



我有以下字符串表达式:

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);

最新更新