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