JavaScript には、プログラミングを簡単にするための小さなトリックがたくさんあります。その 1 つは eval() 関数です。この関数は文字列を JavaScript 式として扱い、それを実行します。
Eval 関数の説明は次のとおりです。
まず Javascript コードを解釈してから、それを実行します。 使用法: Eval(codeString)。
codeString は、eval 後に Javascript エンジンを使用してコンパイルされた Javascript ステートメントを含む文字列です。
小さな例:
var the_unevaled_answer = "2 + 3";
var the_evaled_answer = eval("2 + 3");
alert("評価されていない回答は " + the_unevaled_answer + "、評価された回答は " + the_evaled_answer);
この評価プログラムを実行すると、JavaScript では文字列 "2 + 3" が実際に実行されていることがわかります。したがって、the_evaled_answer の値を eval("2 + 3") に設定すると、JavaScript はそれを理解し、2 と 3 の合計を the_evaled_answer に返します。
これは少しばかげているように思えるかもしれませんが、実際には非常に興味深いことができます。たとえば、eval を使用すると、ユーザー入力に基づいて関数を直接作成できます。これにより、時間やユーザー入力に基づいてプログラム自体が変更され、推論を適用することで素晴らしい結果が得られます。
実際には、eval が使用されることはほとんどありませんが、インデックス付けが難しいオブジェクトを取得するために eval を使用している人を見たことがあるかもしれません。 ドキュメント オブジェクト モデル (DOM) の問題の 1 つは、要求したオブジェクトを取得するのが面倒な場合があることです。たとえば、どの画像を変換するかをユーザーに尋ねる関数を次に示します。 どの画像を変換するには、次の関数を使用します。
関数 swapOne()
{
var the_image =prompt("オウムまたはチーズを変更してください","");
var the_image_object
if (the_image == "オウム")
{
the_image_object = window.document.parrot;
}
それ以外
{
the_image_object = window.document.cheese;
the_image_object.src
= "ant.gif";
}
これらのイメージタグとともに:
<img src="/stuff3a/parrot.gif" name="オウム" />
<img src="/stuff3a/cheese.gif" name="チーズ">
次のような数行に注意してください。
the_image_object = window.document.parrot;
画像オブジェクトを変数に代入します。少し奇妙に見えますが、文法的には正しいです。しかし、画像が 2 枚ではなく 100 枚ある場合はどうなるでしょうか?次のような if-then-else ステートメントをたくさん書く必要があります。
関数 swapTwo()
{
var the_image =prompt("オウムまたはチーズを変更してください","");
window.document.the_image.src = "ant.gif";
残念
ながら、JavaScript は予想どおり、「チーズ」や「オウム」ではなく、the_image という名前の画像を検索するため、「the_image という名前のオブジェクトを聞いていません。」というエラー メッセージが表示されます。
幸いなことに、eval は必要なオブジェクトを取得するのに役立ちます。
関数 simpleSwap()
{
var the_image =prompt("オウムまたはチーズを変更してください","");
var the_image_name = "window.document." + the_image;
var the_image_object = eval(the_image_name);
the_image_object.src = "ant.gif";
}
ユーザーがプロンプト ボックスに「parrot」と入力すると、2 行目に文字列 window.document.parrot が作成され、eval を含む 3 行目は「オブジェクト window.document.parrot をください」という意味になります。必要な画像オブジェクト。画像オブジェクトを取得したら、その src 属性を ant.gif に設定できます。これは実際に非常に便利で、よく使われています。