我需要评估从服务器传递的自定义函数作为字符串.这是我得到的复杂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)
如果您可以保证该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)