我有一个这样的字符串:
var jsontext = 'function(prog) {return ' + path + ';}';
我希望将其解析为javascript。
我该怎么做?
托马斯
答案 0 :(得分:0)
这不是JSON,而是Javascript作为您要评估的文本字符串。
您将需要使用eval(jsontext)
函数,但我强烈反对这一点,因为它是一个非常危险的函数,因为它使用调用者的权限执行脚本。出于性能原因,这也是一个坏主意。如果可能的话,在脚本本身而不是字符串中定义你的函数!
请参阅here。
答案 1 :(得分:0)
这里是完整的代码。 eval功能不起作用,我需要一个解决方法。
function buildRecursiveFilter(filterDef){ var filterFuncs = [];
// Rekursiv für alle nodes Regex filter funktionen definieren
naw.visitNode(filterDef, function(node, path) {
if (typeof node !== "object") {
var selector = eval("(function(TBM) { return " + path.toUpperCase() + "; })") ;
var tester = buildRegexFilter(node, selector);
filterFuncs.push(tester);
}
}, "tbm");
if (filterFuncs.length === 0) return noFilter;
// wende alle test funktionen auf tbm an und liefere die UND Verknüpfung
return function(tbm) {
return _.reduce(
_.map(filterFuncs, function(f) { return f(tbm); }),
function(akku, res) { return akku && res; });
};
}
function buildRegexFilter(filterDef, fieldSelector) {
fieldSelector = fieldSelector || (function(tbm) { return tbm.WP; });
var def = filterDef;
if (typeof (def) === 'string') {
def = def.split(',');
}
var filters = [].concat(def); // Array erzwingen
filters = _.map(filters, function(s) { return $.trim(s); });
var expression = '(' + filters.join('|') + ')';
var rx = expression !== '(.*)' ? new RegExp(expression) : undefined;
return function (tbm) {
return rx.test(fieldSelector(tbm));
};
}
托马斯
答案 2 :(得分:0)
我找到了解决问题的方法。我已经删除了eval的行并将其替换为:
var fn = "function(tbm) { return " + path.toUpperCase() + "; }";
var selector = new Function("return (" + fn + ")")();
托马斯