如何使用js eval返回值?

时间:2011-09-13 08:41:24

标签: javascript

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

var customJSfromServer = "return 2+2+2;"
var evalValue = eval(customJSfromServer);
alert(evalValue) ;// should be "6";

显然这不符合我的预期。我能以任何方式实现这一目标吗?

7 个答案:

答案 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";

请参阅http://www.w3schools.com/jsref/jsref_eval.asp

答案 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";