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" }]"はオブジェクトの配列を返します
。(パフォーマンス、セキュリティ、柔軟性、保守性)

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 に答える