tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

javascriptのevalでエラったら。。。evalが意図したとおり動かない理由

なるべく使いたくないけどたまに使うeval
たまになんでエラーかわからないときありますよね

例。こんなの

var str = "{x:1}";
var obj = eval(str);
alert(obj.x);

結果

undefined

他のサイトのまるパクですけど理由は下記のようです

「eval("x:〜")」の〜の部分には,「値」ではなく「文」が期待されていたということだ。

http://d.hatena.ne.jp/language_and_engineering/20081022/1224597688

なるほど、strに代入した文字列の{}はただの文のくくりで、その後のxがラベルとして解釈されちゃうんですね。

ググるとよく出てくるカッコでくくってる理由ってそんな感じだったんですね。
こんなやつ↓

eval("(" + abc + ")");

おさらい

ダメな例
var str = "{x:1}";
var obj = eval(str);
alert(obj.x);

結果

undefined

良い例
var str = "{x:1}";
var obj = eval("(" + str + ")");
alert(obj.x);

結果

1

たいしたあれではないけどなるほどねーと思ったのでメモ。