2011-02-07 5 views

答えて

49

エラーが実際にSyntaxErrorであるかどうかをテストすることができます。 Mozilla documentation for evalによると

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

なぜ私は自分自身でこれを試していないのだろうと思っています。どうもありがとう! –

+3

@イエス - あなたが疑問に思っている事実は良いことです。とにかく、幸運。 – ChaosPandion

0

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

だから、あなたは運が悪いと思う。この同じドキュメントでは、evalを使用することをお勧めします。

eval()は危険な関数で、呼び出し元の権限で渡されたコードを実行します。 eval()を悪意のある当事者の影響を受ける可能性のある文字列で実行すると、ウェブページ/拡張機能の権限で悪質なコードが実行される可能性があります。さらに重要なことは、サードパーティのコードはeval()が呼び出されたスコープを見ることができ、同様の機能が影響を受けないような攻撃を引き起こす可能性があることです。

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

+2

eval being evilについて、ゴールデンルール:ユーザー入力を評価しないでください。自分で定義したeval文字列のみをサーバーから取得します。はい、MiTM攻撃ですが、サーバーを信頼できない場合は、より大きな問題があります。 – CularBytes

1

http://www.jslint.com/には、javascriptで書かれたjavascriptパーサーが含まれています。それはあなたのコードに関する多くの情報を提供し、よりリラックスできるように設定することができます。

+0

+1 for JSLint。 :-) – Martijn

+0

http://www.jshint.comも良いです。 – Andrew

11

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

私はこのようなコードを足すことをお勧め:

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

"他" のセクションを注意してください。

+0

throwは関数ではありません – Dev

関連する問題