Meneroka Perbezaan Antara eval() dan new Function()
Dalam JavaScript, eval() dan new Function() sering dibandingkan untuk memahami persamaan dan perbezaan mereka. Artikel ini mengkaji sama ada mereka melakukan tugas yang sama dan memberikan penjelasan terperinci tentang kelakuan mereka yang berbeza.
Contoh Kod
Pertimbangkan coretan 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'));
Dalam kod ini, evaluate() menggunakan eval() untuk menilai rentetan sebagai ungkapan JavaScript, manakala func() menggunakan pembina Function() baharu untuk mencipta objek fungsi daripada rentetan dan segera melaksanakannya.
Fungsi Berbeza
Walaupun kedua-dua fungsi menilai rentetan, mereka tidak melaksanakan tugas yang sama. Berikut ialah perbezaan utama:
eval():
Fungsi baharu():
Contoh untuk Menyerlahkan Perbezaan
Pertimbangkan kod berikut:
function test1() { var a = 11; eval('(a = 22)'); alert(a); // alerts 22 }
Jika Fungsi baharu('return (a = 22);')() digunakan dan bukannya eval (), pembolehubah tempatan a akan mengekalkan nilai asalnya kerana Function() baharu tidak mengakses pembolehubah tempatan daripada skop sekeliling.
Syor dan Pertimbangan Keselamatan
Sesetengah Pembangun JavaScript, seperti Douglas Crockford, menyokong agar tidak menggunakan eval() dan Function() baharu melainkan benar-benar perlu. Pengesyoran ini berpunca daripada kebimbangan keselamatan, kerana menilai data yang tidak dipercayai dengan mana-mana fungsi boleh berisiko.
Oleh itu, secara amnya adalah dinasihatkan untuk meneroka kaedah alternatif untuk menilai dan melaksanakan kod JavaScript sebelum menggunakan eval() atau Fungsi baharu( ).
Atas ialah kandungan terperinci Eval() lwn. Fungsi Baharu(): Adakah Mereka Benar-Benar Melakukan Perkara yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!