52 votes

Comment puis-je utiliser js eval pour renvoyer une valeur ?

J'ai besoin d'évaluer une fonction personnalisée transmise par le serveur sous forme de chaîne. Tout cela fait partie d'un json compliqué que je reçois, mais de toute façon, il me semble avoir besoin de quelque chose du genre :

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

Evidemment, cela ne fonctionne pas comme je l'espérais. Est-ce que je peux y parvenir?

98voto

otakustay Points 3812

La première méthode consiste à supprimer les mots-clés de retour et le point-virgule :

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

notez que le '(' et ')' est un must.

ou vous pouvez en faire une fonction :

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

encore plus simple, n'utilisez pas eval :

 var expression = 'return 2+2+2;';
var result = new Function(expression)();
alert(result);

10voto

Matt Points 38395

Si vous pouvez garantir que l' return existera toujours, vous trouverez peut-être ce qui suit plus approprié :

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

Bien sûr, vous pouvez aussi faire :

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

3voto

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

2voto

SergeS Points 4917

Il ne devrait pas y avoir d'instruction return , car eval le lira comme une instruction et ne renverra pas de valeur.

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

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

2voto

Alex Ciminian Points 4648

Cela marche:

 function answer() {
    return 42;
}

var a = eval('answer()');
console.log(a);

Vous devez envelopper le retour dans une fonction et il doit transmettre la valeur de l'eval.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X