web-dev-qa-db-ja.com

eval javascript、構文エラーをチェック

Eval()の呼び出しに構文エラーや未定義変数などがある場合、javascriptを介して検索できるかどうかを知りたかったので、エラー出力をキャプチャする方法がある任意のjavascriptにevalを使用するとしましょうその評価の?

38
Jesus Ramos

エラーが実際にSyntaxErrorであるかどうかをテストできます。

try {
    eval(code); 
} catch (e) {
    if (e instanceof SyntaxError) {
        alert(e.message);
    }
}
58
ChaosPandion

特定のタイプのエラーをキャッチするためにtry catchを使用する場合、他のタイプの例外が抑制されないようにする必要があります。そうしないと、評価されたコードが異なる種類の例外をスローした場合、それが消えてコードの予期しない動作が発生する可能性があります。

次のようなコードを書くことをお勧めします。

try {
    eval(code); 
} catch (e) {
    if (e instanceof SyntaxError) {
        alert(e.message);
    } else {
        throw( e );
    }
}

「else」セクションに注意してください。

11
RandomX

evalのMozillaドキュメント によると:

evalは、最後に評価された式の値を返します。

だから、あなたは運が悪いかもしれないと思う。これと同じドキュメントでは、evalの使用も推奨されていません。

eval()は、呼び出し元の特権で渡されたコードを実行する危険な関数です。悪意のあるパーティの影響を受ける可能性のある文字列を使用してeval()を実行すると、Webページ/拡張機能の権限でユーザーのマシンで悪意のあるコードが実行される可能性があります。さらに重要なことに、サードパーティのコードは、eval()が呼び出されたスコープを確認できます。これにより、同様の関数が影響を受けない方法で攻撃が行われる可能性があります。

したがって、この機能を使用する前にリスクに注意してください。

0
Justin Ethier