Rumah  >  Artikel  >  hujung hadapan web  >  Bila hendak menggunakan `eval()` vs `new Function()` dalam JavaScript?

Bila hendak menggunakan `eval()` vs `new Function()` dalam JavaScript?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 16:07:02375semak imbas

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

Membezakan eval() dan Function() baharu dalam JavaScript

Dalam JavaScript, pembangun sering menghadapi dua fungsi yang kelihatan melakukan tugas yang serupa : eval() dan Fungsi baharu(). Walaupun kedua-dua fungsi menilai rentetan sebagai kod, mekanisme dan implikasi asasnya berbeza dengan ketara.

eval() vs new Function()

Fungsi eval() menilai a rentetan sebagai ungkapan JavaScript dalam skop pelaksanaan semasa. Ini bermakna ia mempunyai akses kepada pembolehubah tempatan yang ditakrifkan dalam skop semasa. Sebaliknya, Function() baru menghuraikan kod JavaScript yang disimpan dalam rentetan ke dalam objek fungsi, yang kemudiannya boleh dipanggil. Objek fungsi ini dicipta dalam skop yang berasingan, dan oleh itu tidak boleh mengakses pembolehubah tempatan persekitaran panggilan.

Contoh

Untuk menggambarkan perbezaan ini, pertimbangkan kod berikut:

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'));

Kedua-dua fungsi akan mengeluarkan hasil yang dijangkakan sebanyak 3. Walau bagaimanapun, jika kita mengubah suai kod untuk menggunakan pembolehubah tempatan, perbezaannya menjadi jelas:

function test1() {
    var a = 11;
    eval('(a = 22)'); // Modifies the local variable within the `test1` function
    alert(a);            // Alerts 22
}

Dalam kes ini, menggunakan eval() akan mengubah suai pembolehubah tempatan a kerana penilaian berlaku dalam skop fungsi test1. Walau bagaimanapun, jika kita menggunakan Function('return (a = 22);')() baharu, pembolehubah tempatan a akan kekal tidak terjejas kerana kod berjalan dalam skop yang berasingan.

Keselamatan dan Pertimbangan

Adalah penting untuk ambil perhatian bahawa eval() dan Function() baharu boleh menimbulkan risiko keselamatan apabila digunakan dengan data yang tidak dipercayai. Input hasad berpotensi mendedahkan maklumat sensitif atau melaksanakan kod sewenang-wenangnya. Oleh itu, adalah amat disyorkan untuk mengelak daripada menggunakan fungsi ini melainkan benar-benar perlu.

Kesimpulan

Ringkasnya, eval() dan Function() baharu beroperasi secara berbeza dalam JavaScript. eval() menilai rentetan dalam skop pelaksanaan semasa, manakala Function() baharu mencipta skop baharu untuk penilaian. Memahami perbezaan ini adalah penting untuk pengaturcaraan JavaScript yang berkesan dan mengekalkan keselamatan.

Atas ialah kandungan terperinci Bila hendak menggunakan `eval()` vs `new Function()` dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn