Подтвердить что ты не робот

Как я могу использовать js eval для возврата значения?

Мне нужно оценить пользовательскую функцию, переданную с сервера в виде строки. Все это часть сложного json, который я получаю, но, во всяком случае, мне, кажется, что-то нужно в строю:

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

Очевидно, что это не работает, как я ожидал. Как я могу это достичь?

4b9b3361

Ответ 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";