Как я могу использовать js eval для возврата значения?
Мне нужно оценить пользовательскую функцию, переданную с сервера в виде строки. Все это часть сложного json, который я получаю, но, во всяком случае, мне, кажется, что-то нужно в строю:
var customJSfromServer = "return 2+2+2;"
var evalValue = eval(customJSfromServer);
alert(evalValue) ;// should be "6";
Очевидно, что это не работает, как я ожидал. Как я могу это достичь?
Ответы
Ответ 1
Первый способ - удалить ключевые слова return и точку с запятой:
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);
Ответ 2
Если вы можете гарантировать, что оператор 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";
Ответ 3
var customJSfromServer = "2+2+2;"
var evalValue = eval(customJSfromServer);
alert(evalValue) ;// should be "6";
Ответ 4
Не должно быть оператора return, поскольку eval будет читать это как statment и не будет возвращать значение.
var customJSfromServer = "2+2+2;"
var evalValue = eval( customJSfromServer );
alert(evalValue) ;// should be "6";
см. http://www.w3schools.com/jsref/jsref_eval.asp
Ответ 5
Это работает:
function answer() {
return 42;
}
var a = eval('answer()');
console.log(a);
Вам нужно обернуть возврат внутри функции и передать значение из eval.
Ответ 6
Измените ответ сервера, чтобы получить "2 + 2 + 2" (удалите "return" ) и попробуйте следующее:
var myvar = eval(response);
alert(myvar);
Ответ 7
В 2019 году с помощью литералов шаблона:
var customJSfromServer = "2+2+2;"
var evalValue = eval('${customJSfromServer}');
alert(evalValue) ;// should be "6";