2008/02/01

evalについて

開発でたま~~~に使う、eval()。

実は、きちんとわかってなくて、開発の時、勢いで使ってしまうのですが、一体、どんな挙動を示すのか、調べてみました。

仕事場に置いてあるJavaポケットリファレンスの第三版の読んでみると、

evalは与えられた数式を評価し結果を返します。

via: 改訂第3版 JavaScriptポケットリファレンス
と書いてありました。



でも、これだけじゃーなんのこっちゃい??と思ったので、実際にソースを組みました 。

var hoge1 = eval("2003.117"); //「2003.117」を返します。



結果は、単純に数値を返しています。

では、これはどうなるんだろーーー??

var hoge2 = eval("1+2*3");//「7」を返します。



この場合、evalの中の計算結果が返ってきました。

でも、これは、バグました。

var hoge3 = eval("var data = 1");//「undefined」を返します。

書き方をちょっと変えて下のようにしてもエラーが起きました。

var hoge4 = eval(var data = "1");//エラーになりました。

つまり、varで変数宣言せずに、evalの中で計算してくれる。ということだったんですね。

では、もうちょい突っ込んで、文字列の場合、どうなるのか??

var hoge5 = eval(test = "'HOGE'");//「HOGE」を返します



つまりこの場合、HOGEを文字列として解釈し、testという変数に代入し、そのtestの結果を返しているということになりました。

ですが、次の2つは、エラーになりました。

var hoge6 = eval(test = "HOGE");//エラーになりました

var hoge7 = eval("3+HOGE");//エラーになりました

hoge6のケースの場合、HOGEが変数として解釈されてしまい、JavaScriptがオブジェクトがありませんと怒りました。
hoge7のケースも同様に3という数値に対して、HOGEという変数結合しようとしているのですが、HOGE自体の変数宣言がなかったので、エラーが返ってきました。

hoge7の場合は、以下の下のように書き換えることで動きました。

var hoge8 = eval("3+'HOGE'"); //「3HOGE」を返す



以上のことから、

1.eval()の中で演算を行ってくれる
2.eval()の中では、varは使えない。
3.文字列表現を行うときは、「'」を使う。

ということがわかりました。

使い方が判明したので、スッキリした^-^v

1 件のコメント:

  1. evalの中でもvar使えます。

    var hoge = "piyo";
    eval("var xxx = " + hoge);
    alert(xxx);

    返信削除