JavaScriptでeval()を使用してはいけない理由

提供:Dev Guides
移動先:案内検索

eval()関数は、JavaScriptで長い間使用されてきました。 使用するのは有害であることが広く認められているため、もう頻繁に目にすることはないでしょう。 それと、それを使用することに伴ういくつかの危険性を簡単に見てみましょう。

キーワードevalは、「evaluate」の略語です。 この関数は基本的にJavaScriptコードを含む文字列を受け取り、それを評価します。

eval('2 + 3 + 1');
// 6

単純な式を評価することができます…またはJavaScriptコードの束!

var foo = 2;

eval('var bar = 3;\
var baz = 1;\
\
function addStuff() {\
  return foo + bar + baz;\
}\
\
addStuff();\
');
// 6

eval()の使用を避ける理由

本当に高レベルのJavaScript(以下を参照)を実行している場合を除き、通常、リスクはeval()を使用する利点を上回ります。 これを使用しない理由のいくつかは次のとおりです。

  • 悪意のあるコードevalを呼び出すと、コンピューターがクラッシュする可能性があります。 例:evalサーバー側を使用していて、いたずら好きなユーザーが無限ループをユーザー名として使用することにした場合。
  • ひどく遅い:JavaScript言語は、文字列だけでなく、JavaScriptタイプ(数値、関数、オブジェクトなど)の全範囲を使用するように設計されています。 evalの使用は、通常のJavaScriptコードよりも桁違いに遅くなります。

eval()がまだECMAScript標準の一部であることを考えると…それの適切な使用法はありますか?

eval()の正当な使用

evalを使用する必要があるJavaScript開発の小さなサブセットがあります。 これらには、テンプレートライブラリ、インタープリター、コマンドライン、およびモジュールシステムの開発が含まれます。 これらのタイプのソフトウェア開発のほとんどは、メタプログラミングおよびビルドツールです。



evalを使用するかどうかわからない場合は、StackOverflowでクイック検索を試してください。 ほとんどの場合、より良いアプローチがあります。