How can I use js eval to return a value?

前端 未结 7 1501
死守一世寂寞
死守一世寂寞 2020-12-13 13:13

I need to evaluate a custom function passed from the server as a string. It\'s all part of a complicated json I get, but anyway, I seem to be needing something along the lin

相关标签:
7条回答
  • 2020-12-13 13:22

    Modify server response to get "2+2+2" (remove "return") and try this:

    var myvar = eval(response);
    alert(myvar);
    
    0 讨论(0)
  • 2020-12-13 13:30

    If you can guarantee the return statement will always exist, you might find the following more appropriate:

    var customJSfromServer = "return 2+2+2;"
    var asFunc = new Function(customJSfromServer);
    alert(asFunc()) ;// should be "6";
    

    Of course, you could also do:

    var customJSfromServer = "return 2+2+2;"
    var evalValue = (new Function(customJSfromServer)());
    alert(evalValue) ;// should be "6";
    
    0 讨论(0)
  • 2020-12-13 13:31

    There should not be return statement , as eval will read this as statment and will not return value.

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

    see http://www.w3schools.com/jsref/jsref_eval.asp

    0 讨论(0)
  • 2020-12-13 13:31

    This works:

    function answer() {
        return 42;
    }
    
    var a = eval('answer()');
    console.log(a);
    

    You need to wrap the return inside a function and it should pass the value on from the eval.

    0 讨论(0)
  • 2020-12-13 13:32

    The first method is to delete return keywords and the semicolon:

    var expression = '2+2+2';
    var result = eval('(' + expression + ')')
    alert(result);
    

    note the '(' and ')' is a must.

    or you can make it a function:

    var expression = 'return 2+2+2;'
    var result = eval('(function() {' + expression + '}())');
    alert(result);
    

    even simpler, do not use eval:

    var expression = 'return 2+2+2;';
    var result = new Function(expression)();
    alert(result);
    
    0 讨论(0)
  • 2020-12-13 13:33
    var customJSfromServer = "2+2+2;"
    var evalValue = eval(customJSfromServer);
    alert(evalValue) ;// should be "6";
    
    0 讨论(0)
提交回复
热议问题