Eval() 与 Function() 用于评估 JavaScript 中的字符串表达式:不同的行为
Eval() versus Function() for evaluating string expressions in JavaScript: Not the same behavior
我有以下字符串表达式:
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 var sum = 0
是语法错误。对于类似的行为,省略 return
。您的字符串表达式 alert
s 而不是 returning 值:
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)()
如果你想让它成为return的值,你就得修改字符串;在这里,我将 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);
我有以下字符串表达式:
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 var sum = 0
是语法错误。对于类似的行为,省略 return
。您的字符串表达式 alert
s 而不是 returning 值:
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)()
如果你想让它成为return的值,你就得修改字符串;在这里,我将 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);