我现在有一个解决方案,但这不是我想的最好的。
function parseEval(value){
var result = undefined;
try {
result = eval(value);
} catch (e) { }
return result;
}
因此,如果value
未定义或包含无法解释的值,则函数返回undefined
。
如果包含现有函数名而不是返回函数对象
如果包含"[1,2,3]"
,则返回int数组
如果包含"[{ label: "Choice1", value: "value1" },{ label: "Choice2", value: "value2" }]"
,则返回一个对象数组
我愿意接受任何解决方案,因为eval有许多缺点。 (性能,安全性,灵活性,可维护性)
答案 0 :(得分:4)
如果这是一个永远不会传递任何用户提供的数据的内部函数,这可能是最好的方法。否则,您可能最好使用JSON.parse
来解析数据并在白名单中查找函数和其他非JSON数据:
var someObject = {
aFunction: function() {},
anInt: 42
};
function parse(value) {
var result;
try {
return JSON.parse(value);
} catch(e) {
return someObject[value];
}
}
答案 1 :(得分:0)
[{ label: "Choice1", value: "value1" },{ label: "Choice2", value: "value2" }]
不是json,但假设它应该是,因为你在问题中提到过,
console.log(typeof JSON.parse(string))
除了功能之外,应该可以很好地工作。