JavaScript - 評価式

評価式

eval() は文字列として表された JavaScript コードを式として評価する関数です。

引数 (string)
JavaScript の式、文、または一連の文を表す文字列です。式には、既存オブジェクトの変数およびプロパティを含められます。
戻り値
与えられたコードの評価結果値を返します。評価結果が空の場合は undefined を返します。
eval("3 + 2"); // 5

eval() はグローバルオブジェクトの関数プロパティです。

eval() 関数の引数は 1 個の文字列です。その文字列が 1 個の式に相当する場合 eval() は引数を式として評価します。引数が 1 個以上の JavaScript 文に相当する場合 eval() は引数を文として評価します。

文字列として算術式を構成した場合、後でその式の評価に eval() を使用できます。例えば、変数 x がある場合、ある変数に "3 * x + 2" といった式の文字列値を代入し、そしてスクリプトの後方で eval() を呼び出すことで x が関わる式の評価を後回しにできます。

eval の引数が文字列でない場合 eval は引数を変更せずに返します。以下の例は String コンストラクタが記述されている場合 eval はその文字列を評価するのではなく String オブジェクトを返します。

eval(new String("2 + 2")); // "2 + 2" を含む String オブジェクトを返します。

この制約は toString を使用する方法で回避できます。

var expression = new String("2 + 2");
eval(expression.toString()); // 4

eval 関数を eval 以外の名前を参照して呼び出した場合、ECMAScript 5 以降ではローカルスコープではなくグローバルスコープで機能します。

function test() {
    var x = 2, y = 4;
    console.log(eval("x + y"));
    // 6: 直接的な呼び出しによってローカルスコープになる
    
    var geval = eval;
    console.log(geval("x + y"));
    // ReferenceError: 間接的な呼び出しによってグローバルスコープになる
}

ただし eval() は、呼び出し元の持つ権限でコードが実行されるリスクがあります。悪意を持つ第三者から影響を受ける可能性がある文字列を eval() で実行すると Web ページや拡張機能の持つアクセス権でユーザのマシン上で悪意あるコードが実行される可能性があります。

関連記事

JavaScript のまとめページはプログラミング JavaScript 入門を参照してください。

Category:
プログラミング
公開日:
更新日:
Pageviews:
22
Shares:
0
Tag:
JavaScript
hatebu icon
hatebu