Rumah > Artikel > hujung hadapan web > Adakah `eval()` dan `new Function()` Benar-benar Boleh Ditukar Dalam JavaScript?
Menyelidiki Perbezaan: Adakah eval() dan Function() baharu Boleh Ditukar dalam JavaScript?
Selalunya dalam JavaScript, kita menghadapi fungsi seperti eval() dan Fungsi baharu(). Walaupun sintaks mereka mungkin kelihatan serupa pada pandangan pertama, pemeriksaan lebih dekat mendedahkan perbezaan asas dalam tingkah laku mereka.
Pertimbangkan fungsi pernyataan tunggal 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'));
Adakah kedua-dua fungsi ini sama dalam operasinya ? Bertentangan dengan kepercayaan popular, mereka tidak.
eval() lwn. new Function()
Untuk menggambarkan perbezaan ini, pertimbangkan fungsi berikut:
function test1() { var a = 11; eval('(a = 22)'); alert(a); // alerts 22 }
Dalam contoh ini, eval() mengubah suai pembolehubah tempatan 'a' dalam fungsi test1(), menghasilkan amaran sebanyak 22. Walau bagaimanapun, jika kita menggunakan Function('return (a = 22);')(), pembolehubah tempatan 'a' akan kekal tidak berubah.
Implikasi dan Awas
Walaupun kedua-dua eval() dan Function() baharu memenuhi tujuannya, adalah penting untuk ambil perhatian bahawa eval() membawa keselamatan yang wujud risiko. Keupayaannya untuk mengakses pembolehubah tempatan dan berpotensi mengubah suai skop global boleh membawa kepada akibat yang tidak diingini.
Akibatnya, secara amnya dinasihatkan untuk mengelak daripada menggunakan eval() melainkan benar-benar perlu. Data tidak dipercayai yang dihantar ke eval() boleh menjejaskan keselamatan aplikasi anda. Begitu juga, Function() baharu harus digunakan dengan berhati-hati apabila mengendalikan input yang tidak dipercayai.
Atas ialah kandungan terperinci Adakah `eval()` dan `new Function()` Benar-benar Boleh Ditukar Dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!