JS eval関数のeval("("+data+"))問題

735 ワード

ここでJS eval関数のeval("("+data+"))の問題についてお話しします
 
例を見てみましょう.
$.ajax({

    url: "",
    type: "",
    success:function(data){


});

dataが文字列の場合、eval("("+data+")")を使用してjsonオブジェクト、JSONに変換できます.parseの機能は同じです.
 
なぜevalは括弧を追加するのですか?
理由:
eval自体の問題.jsonは{}で始まりと終わりますから.JSでは文ブロックとして扱われるので、強制的に式に変換する必要があります.カッコ付けの目的は、eval関数がJavaScriptコードを処理するときにカッコ内の式(expression)を文(statement)として実行するのではなく、オブジェクトに強制的に変換することです.
たとえば、オブジェクトの字面量{}のように、外側のカッコを付けない場合、evalはカッコをJavaScriptコードブロックの開始と終了フラグとして認識し、{}は空の文を実行したとみなされます. 
console.log(eval("{}");     // undefined 

console.log(eval("({})");   // object[Object]