JavaScript eval () "erreur de syntaxe" lors de l'analyse d'une chaîne de caractères

J'ai un peu de code JavaScript qui est spécifié dans un fichier de configuration sur le serveur-côté. Puisque je ne peux pas spécifier une fonction JavaScript dans la configuration de la langue (Lua), j'ai comme une chaîne de caractères. Le serveur retourne une chaîne de caractères dans certains JSON et j'ai le client de l'interpréter à l'aide d'un nettoyage de la fonction:

parse_fields = function(fields) {
    for (var i = 0; i < fields.length; ++i) {
        if (fields[i].sortType) {
            sort_string = fields[i].sortType;
            fields[i].sortType = eval(sort_string);
        }
        return fields;
    }
}; 

Donc, fondamentalement, il n'évalue sortType si elle existe. Le problème est que Firebug fait état d'une "erreur de Syntaxe" sur le eval() ligne. Lorsque j'exécute les mêmes étapes sur la console de Firebug, il fonctionne sans problème et je peux exécuter la fonction que j'attends. J'ai essayé quelques variantes différentes: window.eval au lieu de la plaine evalle stockage de la sortType comme je l'ai fait ci-dessus, et en essayant de petites variations de la chaîne.

Un exemple de valeur de fields[i].sortType est "function(value) { return Math.abs(value); }". Voici les tests que j'ai fait dans la console de Firebug:

>>> sort_string
"function(value) { return Math.abs(value); }"
>>> eval(sort_string)
function()
>>> eval(sort_string)(-1)
1

et l'erreur elle-même dans Firebug:

syntax error
[Break on this error] function(value) { return Math.abs(value); }

Le dernier bit qui peuvent être pertinents, c'est que c'est le tout enveloppé dans un Ext JS onReady() de fonction, avec une Ext.ns de l'espace de noms du changement. Mais j'ai supposé que le window.eval pourrait appeler le mondial evalindépendamment de toute possible eval en plus des espaces de noms spécifiques.

Toutes les idées sont les bienvenues.

source d'informationauteur Kenny Peng