ホームページ > 記事 > ウェブフロントエンド > `eval()` と `new Function()` は JavaScript で本当に互換性がありますか?
区別の詳細: JavaScript では eval() と new Function() は互換性がありますか?
JavaScript では、次のような関数がよくあります。 eval() と new Function()。これらの構文は一見すると似ているように見えますが、詳しく調べると、それらの動作の根本的な違いが明らかになります。
次の単一ステートメント関数を考えてみましょう:
var evaluate = function(string) { return eval('(' + string + ')'); } var func = function(string) { return (new Function( 'return (' + string + ')' )()); } console.log(evaluate('2 + 1')); console.log(func('2 + 1'));
これら 2 つの関数の操作は同じですか? ?一般に信じられていることに反して、それらは違います。
eval() vs. new Function()
この違いを説明するために、次の関数を考えてみましょう。
function test1() { var a = 11; eval('(a = 22)'); alert(a); // alerts 22 }
この例では、eval() は次の関数を変更します。 test1() 関数内のローカル変数 'a' を使用すると、アラート 22 が発生します。ただし、 new Function('return (a = 22);')() を使用すると、ローカル変数 'a' は次のようになります。
影響と注意
eval() と new Function() は両方ともその目的を果たしますが、eval() には固有のセキュリティが備わっていることに注意することが重要です。リスク。ローカル変数にアクセスし、グローバル スコープを変更する可能性があるため、意図しない結果が生じる可能性があります。
そのため、一般に、絶対に必要な場合を除き、eval() の使用を避けることをお勧めします。 eval() に渡される信頼できないデータは、アプリケーションのセキュリティを危険にさらす可能性があります。同様に、信頼できない入力を処理する場合、 new Function() は注意して使用する必要があります。
以上が`eval()` と `new Function()` は JavaScript で本当に互換性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。