我需要评估从服务器传递的自定义函数作为字符串。这是我得到的一个复杂的json的一部分,但无论如何,我似乎需要一些东西:
var customJSfromServer = "return 2+2+2;"
var evalValue = eval(customJSfromServer);
alert(evalValue) ;// should be "6";
显然这不符合我的预期。我能以任何方式实现这一目标吗?
答案 0 :(得分:65)
第一种方法是删除返回关键字和分号:
var expression = '2+2+2';
var result = eval('(' + expression + ')')
alert(result);
请注意'('和')'是必须的。
或者你可以使它成为一个功能:
var expression = 'return 2+2+2;'
var result = eval('(function() {' + expression + '}())');
alert(result);
更简单,不要使用eval:
var expression = 'return 2+2+2;';
var result = new Function(expression)();
alert(result);
答案 1 :(得分:7)
如果您可以保证return
语句始终存在,您可能会发现以下更合适:
var customJSfromServer = "return 2+2+2;"
var asFunc = new Function(customJSfromServer);
alert(asFunc()) ;// should be "6";
当然,您也可以这样做:
var customJSfromServer = "return 2+2+2;"
var evalValue = (new Function(customJSfromServer)());
alert(evalValue) ;// should be "6";
答案 2 :(得分:3)
var customJSfromServer = "2+2+2;"
var evalValue = eval(customJSfromServer);
alert(evalValue) ;// should be "6";
答案 3 :(得分:2)
不应该有return语句,因为eval会将其读作语句而不会返回值。
var customJSfromServer = "2+2+2;"
var evalValue = eval( customJSfromServer );
alert(evalValue) ;// should be "6";
答案 4 :(得分:2)
这有效:
function answer() {
return 42;
}
var a = eval('answer()');
console.log(a);
您需要在函数内部包含返回值,并且它应该从eval传递值。
答案 5 :(得分:1)
修改服务器响应以获取“2 + 2 + 2”(删除“返回”)并尝试:
var myvar = eval(response);
alert(myvar);
答案 6 :(得分:0)
在2019年使用模板文字:
var customJSfromServer = "2+2+2;"
var evalValue = eval(`${customJSfromServer}`);
alert(evalValue) ;// should be "6";