evalはパラメータのカッコを複合文の識別子と見なします
1250 ワード
var jsonStr = $('#jsonData').val();
var json = eval('('+jsonStr+')');
上の2行のコードは「jsでPHPのprint_をシミュレートするr機能」から出ており、受信したjson列をjsのオブジェクトに変換するために使用される.json列はすでに完璧なオブジェクトの直接量である以上、なぜ両端に括弧をつけなければならないのか、なぜ以下のように簡単に書けないのか.
var json = eval(jsonStr);
周愛民先生の『JAVACSCRIPT言語の精髄とプログラミング実践』P 264の5.2を見ました.2「動的実行中の文、式、値」がわかります.
-----------
の原因となる
-----------
evalは入力パラメータのカッコを複合文の識別と見なします!たとえば
{name: "MyName", value:1}
evalは次の手順で解析されます.
次のコードを実行してみます.
alert(eval('{value:1}')); //1
かっこを付けると、オブジェクトを返すことができます.
alert(eval('({value:1})')); //