javascript evalとJSONの間の連絡

15671 ワード

evについて詳しく知りたいなら
alとJSONは以下のリンクを参照してください。
エバー  : https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval
JSON:http://www.json.org/
eval関数の動作原理
eval関数は、与えられたJavaScriptコードを含む文字列を評価し、文字列に含まれる表式または一連の合法的なJavaScript文を実行しようとします。eval関数は、最後の表現またはステートメントに含まれる値または参照を返す値とします。
例をあげて説明する
eval評価JavaScript表現
var bar = 'bar';
var
foobar = eval('"foo" + bar');
alert
(foobar);
eval評価JavaScript文
var bar = 'bar';
// if variable bar equals 'bar', foobar is the result of
// last executing statement: bar="foo-bar";
var
foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}');
alert
(foobar);// change the valuebar = 'foo';
// now our the last executed statement is: bar = "bar-foo";

// therefore the value of variable foobar has been changed

// into 'bar-foo'

foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}');
alert
(foobar);
JSONのフォーマット
JSONのフォーマットは、大かっこと、コロン(:)からなる名前のペアで構成されています。JSON形式と対象の字面量の違いに注意してください。JSONの名前部分は引用符+名前で厳密に表しています。
例をあげて説明する
オブジェクトの文字数
var objectLiteral = {
name: "Objector.L",
age: "24",
special: "JavaScript",
sayName: function() {
return this.name;
}
}
;
JSONオブジェクト
var jsonFormat = {
"summary": "Blogs",
"blogrolls": [
{
"title": "Explore JavaScript",
"link": "http://example.com/"
},
{
"title": "Explore JavaScript",
"link": "http://example.com/"
}
]
}
;
evalとJSON
Ajaxの台頭により、JSONという軽量級のデータフォーマットがクライアントとサーバの間の伝送フォーマットとして徐々に流行してきたため、サーバ端に構築されたJSONデータをどのように利用可能なJavaScriptオブジェクトに変換するかという問題が生じてきた。eval関数を利用するのは簡単で直接的な方法に違いない。変換時はJSON文字列の外側を丸括弧で包装する必要があります。
var jsonObject = eval("(" + jsonFormat + ")");
なぜ括弧を入れますか?
括弧を加える目的は、JavaScriptコードを評価する際に、文としてではなくeval関数に強制的に括弧内の表現をオブジェクトに変換することです。一例として、例えばオブジェクトの字面量{}が、外側の括弧を加えないと、evalは、大きな括弧をJavaScriptコードブロックの開始及び終了フラグとして認識し、{}は空の文を実行したと見なされる。したがって、以下の二つの実行結果は異なる。
alert(eval("{}"); // return undefined
alert
(eval("({})");// return object[Object]
JSON形式の名前の部分はなぜ引用符を付けますか?
eval関数は、表現ではなく合法的なJavaScript文として解釈されるからです。しかし、人々がよく欲しがっているのはエヴァにこのコードを一つの対象に解釈させることです。だからJSONフォーマットは名前の外側に引用符を付けて括弧を結合するように強制されます。このようにevalは間違いなくJSONをコードブロックと解釈します。
例をあげて説明する
evalエラー解析意味
alert(eval('{foo:"bar"}'));   // return "bar", incorrect
eval正確解析JSON
alert(eval('({"foo": "bar"})')); // return JSON object, correct
結論
evalの仕事原理とjsonの厳格な限定フォーマットを理解して、evalとjsonを合理的に結び付けてJavaScriptのデータ伝達と対象転換に応用します。