如何使用js eval返回值?

Rad*_*094 35 javascript

我需要评估从服务器传递的自定义函数作为字符串.这是我得到的复杂json的一部分,但无论如何,我似乎需要一些东西:

var customJSfromServer = "return 2+2+2;"
var evalValue = eval(customJSfromServer);
alert(evalValue) ;// should be "6";
Run Code Online (Sandbox Code Playgroud)

显然这不符合我的预期.我能用这种方式做到吗?

ota*_*tay 73

第一种方法是删除返回关键字和分号:

var expression = '2+2+2';
var result = eval('(' + expression + ')')
alert(result);
Run Code Online (Sandbox Code Playgroud)

注意'('')'是必须的.

或者你可以使它成为一个功能:

var expression = 'return 2+2+2;'
var result = eval('(function() {' + expression + '}())');
alert(result);
Run Code Online (Sandbox Code Playgroud)

更简单,不要使用eval:

var expression = 'return 2+2+2;';
var result = new Function(expression)();
alert(result);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你。在您的第二个示例中,`eval('(function() {' + expression + '}())');` 失败,以防表达式的最后一行有注释,并出现类似 **unexpected 的错误输入结束**。要修复它,请在末尾添加一个换行符:`'\n}())'`。 (2认同)

Mat*_*att 8

如果您可以保证该return语句将始终存在,您可能会发现以下更合适:

var customJSfromServer = "return 2+2+2;"
var asFunc = new Function(customJSfromServer);
alert(asFunc()) ;// should be "6";
Run Code Online (Sandbox Code Playgroud)

当然,你也可以这样做:

var customJSfromServer = "return 2+2+2;"
var evalValue = (new Function(customJSfromServer)());
alert(evalValue) ;// should be "6";
Run Code Online (Sandbox Code Playgroud)