ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で `eval()` と `new Function()` を使用する必要があるのはどのような場合ですか?

JavaScript で `eval()` と `new Function()` を使用する必要があるのはどのような場合ですか?

Patricia Arquette
リリース: 2024-11-02 10:58:02
オリジナル
1040 人が閲覧しました

 When Should You Use `eval()` vs `new Function()` in JavaScript?

JavaScript では eval() と new Function() に互換性がありますか?

JavaScript コードを含む文字列を操作する場合、通常、次の 2 つの関数が発生します。 eval() と new Function()。どちらも文字列に埋め込まれたコードを実行できますが、異なる特徴と動作を示します。

eval() と new Function(): 主な違い

  • 範囲: 主な違いはその範囲にあります。 eval() は、現在の実行スコープ内でコードを評価します。これは、ローカル変数にアクセスできることを意味します。一方、 new Function() は新しいスコープを作成し、ローカル変数に直接アクセスできません。
  • Security: eval() はセキュリティの脆弱性で有名です。これにより、任意のコードの評価が可能になり、入力文字列が信頼できない場合は悪意のあるコードの実行につながる可能性があります。 new Function() は、コードを別のスコープで実行される関数オブジェクトに解析するため、より安全です。

コード スニペットの理解

コード スニペットあなたが提供した eval() と new Function() の異なる動作を示します:

<code class="javascript">var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}</code>
ログイン後にコピー

両方の関数は文字列 "2 1" を評価し、結果を返します。ただし、関数にローカル変数 "a" を含めるようにコードを変更すると、eval() はローカル変数にアクセスして変更できるが、new Function() はアクセスできないことがわかります。

注意事項とベスト プラクティス

eval() と new Function() は動的コードを実行する便利な方法を提供しますが、慎重に使用する必要があります。

  • eval(): eval() は、セキュリティ リスクとパフォーマンス上の懸念により、通常は推奨されません。
  • new Function() は注意して使用してください: new Function() は eval() より安全です
  • 入力のサニタイズ: eval() または new Function() 経由で実行しているコードがサニタイズされ、信頼できることを常に確認してください。

ほとんどの場合、動的コード実行には、テンプレート リテラルや new なしの Function コンストラクターなど、確立された JavaScript 言語機能に依存することをお勧めします。

以上がJavaScript で `eval()` と `new Function()` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート