1

我现在有一个解决方案,但这不是我认为的最好的。

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 有很多缺点。(性能、安全性、灵活性、可维护性)

4

2 回答 2

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];
    }
}
于 2013-08-01T11:44:00.860 回答
0
[{ label: "Choice1", value: "value1" },{ label: "Choice2", value: "value2" }]

不是json,但假设它应该是,因为您在问题中提到了这一点,

 console.log(typeof JSON.parse(string)) 

除了功能之外,应该可以很好地工作。

于 2013-08-01T11:43:49.517 回答