eval関数の使い方(誤認識をなくそう)

よく、2つのテキストフィールドの合計を算出するJavaScriptの実装サンプルに、

var leftValue = document.getElementById("left").value;
var rightValue = document.getElementById("right").value;
var totalValue = eval(leftValue) + eval(rightValue);

というのがあるのでこれまでeval関数はこういうものだと思っていたのですが、使い方が違うそうです(結果的には動くけど、eval関数の使い方が間違っている)。

eval関数は「引数を評価する」ためのものだということです。

例えば、

var user = {
  f1 : function() {console.log(1)},
  f2 : function() {console.log(2)},
  f3 : function() {console.log(3)},
}

for( var i=1; i<=3; i++ ) {
  eval('user.f' + i + '()');
}

とこのように、いわゆるJavaScriptのリフレクションを実現するような時に使用する関数だということだそうです。

最初に示した計算の例では、文字列を数値に変更したいだけなので、以下のように組み込み関数であるparseInt関数を使いましょう。
eval関数は実行速度が遅いというのもありますし。

var leftValue = document.getElementById("left").value;
var rightValue = document.getElementById("right").value;
var totalValue = parseInt(leftValue) + parseInt(rightValue);

では以下の実行結果は…、

alert(eval('2+2'));

「4」がalertされます。