[新着] Webテンプレートを仮オープンしました
var jsonText = '{ "name": "noname", "age": 19, "datas": [0, 1, 2, 3, 4] }';
// var json = eval(jsonText); // ×
var json = eval("(" + jsonText + ")"); // ○
alert(json.name + "/" + json.age + "/" + json.datas[2]);
var functionText = "function(){alert(1)}";
var func = eval(functionText); // ×
var func = eval("(" + functionText + ")"); // ×
func();それぞれ、上のコードがだめなのはなんとなくわかるのですが、{ "name": "noname", "age": 19, "datas": [0, 1, 2, 3, 4] }
// ステートメント冒頭の「{」がブロック開始と見なされ、続く「:」はラベルと見なされる
// → SyntaxError: invalid labeleval ('function test() { alert(1); }');
// IE:undefined, Fx:undefined, Op:undefined, Sa:undefinedeval('function() { alert(1); }');
// IE:undefined, Fx:Function, Op:SyntaxError, Sa:Functioneval('(function() { alert(1); })');
// IE:undefined, Fx:Function, Op:Function, Sa:Functioneval('var func = ' + functionText);
func();と書けば特に問題ないわけだし。