開発でたま~~~に使う、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
evalの中でもvar使えます。
返信削除var hoge = "piyo";
eval("var xxx = " + hoge);
alert(xxx);