如何确定字符串是否包含数组,对象数组或函数定义

时间:2013-08-01 11:38:14

标签: javascript

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

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

2 个答案:

答案 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)) 

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